Declaración de variable que no entiendo en Lua
Estaba leyendo algo de Lua y haciendo un pequeño curso para usarlo con Löve 2D, en un ejemplo dan declare una variable de esta manera, que honestamente no entiendo:
ballDX = math.random(2) == 1 and 100 or -100
Intenté buscar en Google y leer un poco, pero no he encontrado un lugar para explicarlo específicamente. Mirando lo que dice identifico lo obvio, BallDX es igual a un número aleatorio entre 1 y 2, pero a partir de ahí me confundo bastante, ¿qué significa que el número aleatorio es igual a 1 y 100 o -100?
Respuestas
Este es un concepto de Lua algo interesante
El operador anddevuelve su primer argumento si es falso; de lo contrario, devuelve su segundo argumento.
El operador ordevuelve su primer argumento si no es falso; de lo contrario, devuelve su segundo argumento
En este caso se math.random(2) == 1 and 100 or -100comporta exactamente como un operador ternario, se puede traducir a:
If math.random(2) equals to 1, set ballDX = 100, otherwise set ballDX = -100
Por ejemplo, suponga que tiene una variable llamada cy desea asignarle un valor solo si la avariable está por encima de 10, con un operador ternario haría esto:c = a > 10 ? a : b
En Lua usarías c = a > 10 and a or b