Operadores Lua

Un operador es un símbolo especial que le indica al intérprete que ejecute operaciones matemáticas o lógicas específicas. Lua proporciona los siguientes tipos de operadores:

  • Operadores aritméticos
  • Operadores relacionales
  • Operadores lógicos
  • Otros operadores

Operadores aritméticos

La siguiente tabla enumera los operadores aritméticos comunes en el lenguaje Lua, con A = 10 y B = 20:

OperadorDescripciónEjemplo
+SumaA + B da como resultado 30
-RestaA - B da como resultado -10
*MultiplicaciónA * B da como resultado 200
/DivisiónB / A da como resultado 2
%MóduloB % A da como resultado 0
^ExponenciaciónA^2 da como resultado 100
-Signo negativo-A da como resultado -10
//Operador de división entera (>=lua5.3) 5//2Da como resultado 2

Ejemplo

Podemos entender más a fondo la aplicación de los operadores aritméticos mediante el siguiente ejemplo:

Ejemplo

a = 21
b = 10
c = a + b
print("Line 1 - el valor de c es ", c )
c = a - b
print("Line 2 - el valor de c es ", c )
c = a * b
print("Line 3 - el valor de c es ", c )
c = a / b
print("Line 4 - el valor de c es ", c )
c = a % b
print("Line 5 - el valor de c es ", c )
c = a^2
print("Line 6 - el valor de c es ", c )
c = -a
print("Line 7 - el valor de c es ", c )

El resultado de ejecutar el programa anterior es:

Line 1 - c 的值为     31
Line 2 - c 的值为     11
Line 3 - c 的值为     210
Line 4 - c 的值为     2.1
Line 5 - c 的值为     1
Line 6 - c 的值为     441
Line 7 - c 的值为     -21

En Lua,// se usa como operador de división, y el resultado incluye la parte decimal;//// se usa como operador de división entera, y el resultado no incluye la parte decimal:

Ejemplo

a = 5
b = 2

print("División - el valor de a/b es ", a / b )
print("División entera - el valor de a//b es ", a // b )

El resultado de ejecutar el programa anterior es:

除法运算 - a/b 的值为   2.5
整除运算 - a//b 的值为  2

Operadores relacionales

La siguiente tabla enumera los operadores relacionales comunes en el lenguaje Lua, con A = 10 y B = 20:

OperadorDescripciónEjemplo
==Igual que: comprueba si dos valores son iguales; si son iguales devuelve true, de lo contrario devuelve false(A == B) es false.
~=Distinto de: comprueba si dos valores son iguales; si no son iguales devuelve true, de lo contrario devuelve false(A ~= B) es true.
>Mayor que: si el valor de la izquierda es mayor que el de la derecha, devuelve true; de lo contrario, false(A > B) es false.
<Menor que: si el valor de la izquierda es mayor que el de la derecha, devuelve false; de lo contrario, true(A < B) es true.
>=Mayor o igual que: si el valor de la izquierda es mayor o igual que el de la derecha, devuelve true; de lo contrario, false(A >= B) devuelve false.
<=Menor o igual que: si el valor de la izquierda es menor o igual que el de la derecha, devuelve true; de lo contrario, false(A <= B) devuelve true.

Ejemplo

Podemos entender más a fondo la aplicación de los operadores relacionales mediante el siguiente ejemplo:

Ejemplo

a = 21
b = 10

if( a == b )
then
   print("Line 1 - a es igual a b" )
else
   print("Line 1 - a no es igual a b" )
end

if( a ~= b )
then
   print("Line 2 - a no es igual a b" )
else
   print("Line 2 - a es igual a b" )
end

if ( a < b )
then
   print("Line 3 - a es menor que b" )
else
   print("Line 3 - a es mayor o igual que b" )
end

if ( a > b )
then
   print("Line 4 - a es mayor que b" )
else
   print("Line 5 - a es menor o igual que b" )
end

-- Modificar los valores de a y b
a = 5
b = 20
if ( a <= b )
then
   print("Line 5 - a es menor o igual que b" )
end

if ( b >= a )
then
   print("Line 6 - b es mayor o igual que a" )
end

El resultado de ejecutar el programa anterior es:

Line 1 - a 不等于 b
Line 2 - a 不等于 b
Line 3 - a 大于等于 b
Line 4 - a 大于 b
Line 5 - a 小于等于  b
Line 6 - b 大于等于 a

Operadores lógicos

La siguiente tabla enumera los operadores lógicos comunes en el lenguaje Lua, con A = true y B = false:

OperadorDescripciónEjemplo
andOperador Y lógico (and). Si A es false, devuelve A; de lo contrario, devuelve B.(A and B) es false.
orOperador O lógico (or). Si A es true, devuelve A; de lo contrario, devuelve B.(A or B) es true.
notOperador NO lógico (not). Invierte el resultado de la operación lógica; si la condición es true, el NO lógico es false.not(A and B) es true.

Ejemplo

Podemos entender más a fondo la aplicación de los operadores lógicos mediante el siguiente ejemplo:

Ejemplo

a = true
b = true

if ( a and b )
then
   print("a and b - la condición es true" )
end

if ( a or b )
then
   print("a or b - la condición es true" )
end

print("---------Línea divisoria---------" )

-- Modificar los valores de a y b
a = false
b = true

if ( a and b )
then
   print("a and b - la condición es true" )
else
   print("a and b - la condición es false" )
end

if ( not( a and b) )
then
   print("not( a and b) - la condición es true" )
else
   print("not( a and b) - la condición es false" )
end

El resultado de ejecutar el programa anterior es:

a and b - 条件为 true
a or b - 条件为 true
---------分割线---------
a and b - 条件为 false
not( a and b) - 条件为 true

Otros operadores

La siguiente tabla enumera los operadores de concatenación y los operadores para calcular la longitud de tablas o cadenas en Lua:

OperadorDescripciónEjemplo
..Concatena dos cadenasa..b, donde a es "Hello " y b es "World", da como resultado "Hello World".
#Operador unario que devuelve la longitud de una cadena o tabla.#"Hello" devuelve 5

Ejemplo

Podemos entender más a fondo la aplicación de los operadores de concatenación y de longitud mediante el siguiente ejemplo:

Ejemplo

a = "Hello "
b = "World"

print("Concatenar las cadenas a y b ", a..b )

print("Longitud de la cadena b ",#b )

print("Longitud de la cadena Test ",#"Test" )

print("Longitud de la URL de Ejemplo ",#"www.example.com" )

El resultado de ejecutar el programa anterior es:

连接字符串 a 和 b     Hello World
b 字符串长度     5
字符串 Test 长度     4
Ejemplo网址长度     14

Precedencia de operadores

En orden de mayor a menor precedencia:

^
not    - (unary)
*      /       %
+      -
..
<      >      <=     >=     ~=     ==
and
or

Excepto ^^y..todos los demás operadores binarios son asociativos por la izquierda.

a+i < b/2+1          <-->       (a+i) < ((b/2)+1)
5+x^2*8              <-->       5+((x^2)*8)
a < y and y <= z     <-->       (a < y) and (y <= z)
-x^2                 <-->       -(x^2)
x^y^z                <-->       x^(y^z)

Ejemplo

Podemos entender más a fondo la precedencia de los operadores en Lua mediante el siguiente ejemplo:

Ejemplo

a = 20
b = 10
c = 15
d = 5

e = (a + b) * c / d;-- ( 30 * 15 ) / 5
print("(a + b) * c / d el valor de la operación es:",e )

e = ((a + b) * c) / d; -- (30 * 15 ) / 5
print("((a + b) * c) / d el valor de la operación es:",e )

e = (a + b) * (c / d);-- (30) * (15/5)
print("(a + b) * (c / d) el valor de la operación es:",e )

e = a + (b * c) / d;  -- 20 + (150/5)
print("a + (b * c) / d el valor de la operación es:",e )

El resultado de ejecutar el programa anterior es:

(a + b) * c / d 运算值为  :    90.0
((a + b) * c) / d 运算值为 :    90.0
(a + b) * (c / d) 运算值为 :    90.0
a + (b * c) / d 运算值为   :    50.0
Otras extensiones