Declaración de variable que no entiendo en Lua

Sep 27 2020

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

5 Coal Sep 27 2020 at 06:42

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