#!/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
endComo 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
iose manejan como tablas.Cuando escribimos
io.readestamos diciendo, indexa la tablaiousando la cadenareadcomo clave. Podéis ver este mismo comportamiento en el códigoswitchmás arriba donde indexamos la funcióndefault.
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.readnos 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 caracteresPuede 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_VALORResumen
- 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 defalseynilse consideratrue - No soporta
switch - Soporta constantes nativamente desde Lua 5.4
(
local CONSTANT <const> = val)
■
