Condiciones en LUA
SOLUCIONARIO
Condiciones en LUA
2024-11-22
Por
Occam's Razor

#!/usr/bin/lua
local const n = 42  -- A partir de Lua 5.4

io.write ("Adivina en que número estoy pensando ? ")
v = io.read ("*n")

if v < 0 then
   print ("Solo Números Positivos")
   os.exit (-1);
end

if v == n then print ("Bien Hecho!!!") 
else
    print ("Sigue Probando")
    io.write ("El número es: ");
    if v > n then print "MENOR" else print "MAYOR" end
    
    h = v - n
    h = h < 0 and -h  or h

    io.write ("PISTA: ")
    if     h < 5  then print ("TE QUEMAS!!!")
    elseif h < 10 then print ("CALIENTE")
    elseif h < 15 then print ("TEMPLADO")
    else               print ("FRIO")
    end
end

Como hemos dicho varias veces Lua es un lenguaje muy sencill y esto ser refleja también en las construcciones que ofrece para trabajar con condiciones. Dispone de un constructor if-then-elseif-then-else-end y como podemos ver en el ejemplo es uno de esos lenguajes que usa then.

SABÍAS QUE

El operador no_igual es ~= en Lua y no != como en la mayoría de lenguajes.

Lua tampoco dispone de un operador ternario, y como suele ser normal en estas ocasiones, permite utilizar los operadores and y or para conseguir un resultado similar.

Lua tampoco ofrece una instrucción switch como sucede con muchos de los otros lenguajes que hemos visto. Al igual que en esos otros lenguajes, es posible simular esa misma funcionalidad, de una forma bastante elegante, lo que en Lua pasa por utilizar tablas.

local valores= {
  [1] = function (x) print ("Uno") end,
  [2] = function (x) print ("Dos") end,
  default = function (x) print ("Default:",x) end,
}
function switch (t,v)
    if t[v] then t[v]() else t.default(v) end
    
valor = 1
switch (valores, valor)
    

La solución anterior hace uso de tablas (el tipo de datos principal de Lua) y funciones. Todavía no hemos hablado de ninguno de ellos, pero bueno, así los vamos introduciendo y os hacéis una idea de lo potente que es este sencillo lenguaje.

SOY NOVATO

Lua ofrece un conjunto de tipos reducidos. A saber: Boleano, Numero, Cadena de Caracteres, Tablas y Funciones. De todos ellos, las Tablas son el tipo más versátil y central en el lenguaje. Una tabla es un array asociativo (tabla hash si prefieres) y se utilizan para todo, desde representar arrays a colas. Para que os hagáis una idea, incluso los packetes como io se manejan como tablas.

Cuando escribimos io.read estamos diciendo, indexa la tabla io usando la cadena read como clave. Podéis ver este mismo comportamiento en el código switch más arriba donde indexamos la función default.

El código de arriba es solo una de las posibilidades para implementar la funcionalidad de switch, pero hay otras formas de conseguir lo mismo.

SABÍAS QUE

La función io.read nos permite leer la entrada del usuario. Esta función solo acepta 4 parámetros

     *a o *all    : Lee todo el fichero/entrada de usuario
     *l o *line   : Lee la siguiente línea
     *n o *number : Lee un número
     num          : Lee una cadena de hasta num caracteres

Puede leer todos los detalles en la documentación oficial.

Lua soporta booleanos que pueden tomar los valores true y false. En general, cualquier cosa distinta de false o nil se considera true.

A partir de su versión 5.4, Lua soporta constantes que pueden ser definidas de la siguiente forma:

    local const MI_CONSTANTE = MI_VALOR

Resumen

  • Soporta if ... then [elseif then] ...[else] ...end
  • No Soporta forma reducida de if
  • No soporta operador terciario. Alternativa cond and Val1 or Val2
  • Soporta booleanos con valores: true/false. Cualquier cosa distinta de false y nil se considera true
  • No soporta switch
  • Soporta constantes nativamente desde Lua 5.4 (local CONSTANT <const> = val )

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)