Un operador es un símbolo para realizar una operación o evaluación condicional.
Lógicos
Los operadores lógicos devuelven valores dependiendo de los valores booleanos de los argumentos dados. Si un argumento no es false o nil, entonces el operador lo evalúa como true. A diferencia de muchos otros lenguajes, Luau considera tanto cero como la cadena vacía como true. La siguiente tabla resume cómo se comportan los operadores lógicos en condicionales.
| Operador | Descripciones |
|---|---|
| and | Se evalúa como true solo si ambas condiciones son verdaderas |
| or | Se evalúa como true si alguna de las condiciones es verdadera |
| not | Se evalúa como el opuesto de la condición |
and
El operador binario and devuelve uno de los dos argumentos. Si el primer argumento se evalúa como true, entonces devuelve el segundo argumento. De lo contrario, devuelve el primer 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
Puedes usar and para probar múltiples condiciones en estructuras de control como las instrucciones if y los while. Por ejemplo, la siguiente instrucción if‑then verifica que ambas condiciones sean verdaderas:
local pasta = truelocal tomatoSauce = trueif pasta == true and tomatoSauce == true thenprint("Tenemos cena de espagueti")elseprint("Algo falta...")end-- Output: Tenemos cena de espagueti
or
El operador binario or devuelve uno de los dos argumentos. Si el primer argumento se evalúa como true, entonces devuelve el primer argumento. De lo contrario, devuelve el segundo argumento.
local y = x or 1print(y) -- 1 porque x no existe y por lo tanto es nillocal d = falselocal e = d or 1print(e) -- 1 porque d es 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
Puedes usar or para realizar pruebas lógicas complejas en estructuras de control. Por ejemplo, la siguiente instrucción if‑then verifica si dos condiciones son verdaderas o si una tercera condición es verdadera:
local pasta = falselocal tomatoSauce = truelocal garlicBread = trueif (pasta == true and tomatoSauce == true) or garlicBread == true thenprint("Tenemos cena de espagueti O pan de ajo")elseprint("Algo falta...")end-- Output: Tenemos cena de espagueti O pan de ajo
not
El operador unario not devuelve el valor booleano opuesto del argumento. Si el argumento es false o nil, entonces devuelve true. De lo contrario, devuelve false.
print(not true) -- falseprint(not false) -- trueprint(not nil) -- trueprint(not "text") -- falseprint(not 0) -- false
Puedes usar el operador not para activar una condición o un bucle si una variable es false o nil.
local nilVariable -- La variable se declara pero no tiene valor, por lo que es nillocal falseVariable = false -- La variable se declara con valor de falseif not nilVariable thenprint(nilVariable) -- Salida "nil" porque nil no es trueendif not falseVariable thenprint(falseVariable) -- Salida "false" porque false no es trueend
También puedes usar el operador not para probar el opuesto de una declaración de múltiples condiciones. En el siguiente ejemplo de código, la condición if‑then verifica que ni sea cierto que tres es mayor que cuatro ni que cinco es mayor que cuatro.
local three = 3local four = 4local five = 5if not (three > four or five < four) thenprint("Tres es menor que 4 y cinco es mayor que 4.")end-- Output: Tres es menor que 4 y cinco es mayor que 4.
Relacionales
Los operadores relacionales comparan dos parámetros y devuelven un booleano: true o false.
| Operador | Descripción | Ejemplo | Método metamétodo asociado |
|---|---|---|---|
| == | Igual a | 3 == 5 → false | __eq |
| ~= | No igual a | 3 ~= 5 → true | |
| > | Mayor que | 3 > 5 → false | |
| < | Menor que | 3 < 5 → true | __lt |
| >= | Mayor o igual que | 3 >= 5 → false | |
| <= | Menor o igual que | 3 <= 5 → true | __le |
Aritméticos
Luau soporta los operadores binarios habituales junto con exponentiación, módulo y negación unaria.
| Operador | Descripción | Ejemplo | Método metamétodo asociado |
|---|---|---|---|
| + | Suma | 1 + 1 = 2 | __add |
| - | Resta | 1 - 1 = 0 | __sub |
| * | Multiplicación | 5 * 5 = 25 | __mul |
| / | División | 10 / 5 = 2 | __div |
| // | División entera | 10 // 4 = 2 | __idiv |
| ^ | Exponentiación | 2 ^ 4 = 16 | __pow |
| % | Módulo | 13 % 7 = 6 | __mod |
| - | Negación unaria | -2 = 0 - 2 | __unm |
Asignación compuesta
Puedes usar operadores de asignación compuesta para establecer una variable igual al resultado de una operación donde el primer parámetro es el valor actual de la variable.
La operación en una asignación compuesta ocurre una vez. Por ejemplo, si una expresión genera un índice aleatorio en una tabla, Luau utiliza el mismo índice tanto para la operación como para la asignación.
En los siguientes ejemplos, supón que local x = 3.
| Operador | Operación | Ejemplo | Nuevo valor de x |
|---|---|---|---|
| += | Suma | x += 2 | 5 |
| -= | Resta | x -= 2 | 1 |
| *= | Multiplicación | x *= 2 | 6 |
| /= | División | x /= 2 | 1.5 |
| //= | División entera | x //= 2 | 1 |
| %= | Módulo | x %= 2 | 1 |
| ^= | Exponentiación | x ^= 2 | 9 |
| ..= | Concatenación | x ..= " ¡Mundo!" | "3 ¡Mundo!" |
Varios
Los operadores varios incluyen concatenación y longitud.
| Operador | Descripción | Ejemplo | Método metamétodo asociado |
|---|---|---|---|
| .. | Concatena dos cadenas | print("¡Hola " .. "Mundo!") | __concat |
| # | Longitud de la tabla | Si tableVar = {1, 2, 3}, entonces #tableVar == 3. | __len |