Um operador é um símbolo para realizar uma operação ou avaliação condicional.
Lógicos
Operadores lógicos retornam valores dependendo dos valores booleanos dos argumentos dados. Se um argumento não for false ou nil, então o operador o avalia como true. Ao contrário de muitas outras linguagens, Luau considera tanto zero quanto a string vazia como true. A tabela a seguir resume como os operadores lógicos se comportam em condicionais.
| Operador | Descrições |
|---|---|
| and | Avalia como true apenas se ambas as condições forem verdadeiras |
| or | Avalia como true se pelo menos uma condição for verdadeira |
| not | Avalia como o oposto da condição |
and
O operador binário and retorna um dos dois argumentos. Se o primeiro argumento avaliar para true, então retorna o segundo argumento. Caso contrário, retorna o primeiro argumento.
print(4 and 5) -- 5print(nil and 12) -- nilprint(false and 12) -- falseprint(false and true) -- falseprint(false and false) -- falseprint(true and false) -- falseprint(true and true) -- true
Você pode usar and para testar várias condições em estruturas de controle, como if statements e while loops. Por exemplo, a seguinte declaração if‑then testa se duas condições são ambas verdadeiras:
local pasta = truelocal tomatoSauce = trueif pasta == true and tomatoSauce == true thenprint("Nós temos jantar de espaguete")elseprint("Algo está faltando...")end-- Output: Nós temos jantar de espaguete
or
O operador binário or retorna um dos dois argumentos. Se o primeiro argumento avaliar para true, então retorna o primeiro argumento. Caso contrário, retorna o segundo argumento.
local y = x or 1print(y) -- 1 porque x não existe e, portanto, é nillocal d = falselocal e = d or 1print(e) -- 1 porque d é falseprint(4 or 5) -- 4print(nil or 12) -- 12print(false or 12) -- 12print(false or true) -- trueprint(false or false) -- falseprint(true or false) -- trueprint(true or true) -- true
Você pode usar or para realizar testes lógicos complexos em estruturas de controle. Por exemplo, a seguinte declaração if‑then testa se duas condições são verdadeiras ou se uma terceira condição é verdadeira:
local pasta = falselocal tomatoSauce = truelocal garlicBread = trueif (pasta == true and tomatoSauce == true) or garlicBread == true thenprint("Nós temos ou jantar de espaguete OU pão de alho")elseprint("Algo está faltando...")end-- Output: Nós temos ou jantar de espaguete OU pão de alho
not
O operador unário not retorna o valor booleano oposto do argumento. Se o argumento for false ou nil, então retorna true. Caso contrário, retorna false.
print(not true) -- falseprint(not false) -- trueprint(not nil) -- trueprint(not "text") -- falseprint(not 0) -- false
Você pode usar o operador not para acionar uma condição ou loop se uma variável for false ou nil.
local nilVariable -- Variável é declarada, mas não possui valor, então é nillocal falseVariable = false -- Variável é declarada com valor falsoif not nilVariable thenprint(nilVariable) -- Produz "nil" porque nil não é trueendif not falseVariable thenprint(falseVariable) -- Produz "false" porque false não é trueend
Você também pode usar o operador not para testar o oposto de uma declaração de múltiplas condições. No seguinte exemplo de código, a condição if‑then testa que não é verdadeiro que três é maior que quatro nem que cinco é maior que quatro.
local three = 3local four = 4local five = 5if not (three > four or five < four) thenprint("Três é menor que 4 e cinco é maior que 4.")end-- Output: Três é menor que 4 e cinco é maior que 4.
Relacionais
Operadores relacionais comparam dois parâmetros e retornam um boolean: true ou false.
| Operador | Descrição | Exemplo | Método metafísico associado |
|---|---|---|---|
| == | Igual a | 3 == 5 → false | __eq |
| ~= | Diferente de | 3 ~= 5 → true | |
| > | Maior que | 3 > 5 → false | |
| < | Menor que | 3 < 5 → true | __lt |
| >= | Maior ou igual a | 3 >= 5 → false | |
| <= | Menor ou igual a | 3 <= 5 → true | __le |
Aritméticos
Luau suporta os habituais operadores binários juntamente com exponenciação, módulo e negação unária.
| Operador | Descrição | Exemplo | Método metafísico associado |
|---|---|---|---|
| + | Adição | 1 + 1 = 2 | __add |
| - | Subtração | 1 - 1 = 0 | __sub |
| * | Multiplicação | 5 * 5 = 25 | __mul |
| / | Divisão | 10 / 5 = 2 | __div |
| // | Divisão por inteiro | 10 // 4 = 2 | __idiv |
| ^ | Exponenciação | 2 ^ 4 = 16 | __pow |
| % | Módulo | 13 % 7 = 6 | __mod |
| - | Negação unária | -2 = 0 - 2 | __unm |
Atribuição composta
Você pode usar operadores de atribuição composta para definir uma variável igual ao resultado de uma operação onde o primeiro parâmetro é o valor atual da variável.
A operação em uma atribuição composta ocorre uma vez. Por exemplo, se uma expressão gera um índice aleatório em uma tabela, Luau usa o mesmo índice tanto para a operação quanto para a atribuição.
Nos seguintes exemplos, suponha que local x = 3.
| Operador | Operação | Exemplo | Novo Valor de x |
|---|---|---|---|
| += | Adição | x += 2 | 5 |
| -= | Subtração | x -= 2 | 1 |
| *= | Multiplicação | x *= 2 | 6 |
| /= | Divisão | x /= 2 | 1.5 |
| //= | Divisão por inteiro | x //= 2 | 1 |
| %= | Módulo | x %= 2 | 1 |
| ^= | Exponenciação | x ^= 2 | 9 |
| ..= | Concatenação | x ..= " Mundo!" | "3 Mundo!" |
Diversos
Operadores diversos incluem concatenação e comprimento.
| Operador | Descrição | Exemplo | Método metafísico associado |
|---|---|---|---|
| .. | Concatena duas strings | print("Olá " .. "Mundo!") | __concat |
| # | Comprimento da tabela | Se tableVar = {1, 2, 3}, então #tableVar == 3. | __len |