martes, 24 de septiembre de 2013

Tutorial lua en linux (condicionales)

En esta parte de los tutoriales de Lua aprenderemos a usar condicionales o como aprendí a decirles,estructuras selectivas las cuales deciden que "camino" elegir para un programa,y decidir que ejecutar basado en esta elección.

Tenemos de ejemplo esto:

Voy a usar mi pc con Internet,primero debo ver si tengo electricidad,si tengo la prendo,si no la conecto o no la prendo,luego si la prendo necesito Internet,si hay lo uso,si no hay me conecto a wifi,etc.

Vamos a ver un ejemplo y después lo explico:

 #!/usr/bin/env lua  
   
 -- Vemos si tiene energia la pc  
   
 t = {"Si","No"}  
   
 math.randomseed(os.time())  
   
 num = math.random(1,2)  
   
 -- ^ Funciones para elegir un numero al azar y asociarlo a una respuesta  
   
 res = t[num] -- Asociamos respuesta  
   
 function enciende()  
     repeat  
       io.write("Encender? (S/N):")  
       response = io.read()  
     until response == "S" or response == "N"  
     if response == "S" then  
       print("Encendida :D")  
       while true do  
         io.write("Ejemplo terminado\nEscribe exit para salir: ")  
         local response = io.read()  
         if response == "exit" then  
           break  
         end  
       end  
       os.exit(0)  
     else  
       print ("No encendida")  
       print ("Hasta luego")  
       os.exit(0)  
     end  
 end  
   
 while true do  
   if res == "Si" then  
     print ("Tienes energia")  
     enciende()  
   else  
     print("No tienes energia")  
     repeat  
       io.write("Conectar a la luz? (S/N):")  
       response = io.read()  
     until response == "S" or response == "N"  
     if response == "S" then  
       res = t[1]  
     end  
     if response == "N" then  
       print ("No conectada,hasta luego.")  
       os.exit(0)  
     end  
   end  
 end  
   


Ahora lo ejecutan y podrán ver lo practicas que son las selecciones:



En este caso vimos las palabras especiales:

if,else,while,repeat,until,end


Primero que nada debemos saber que una estructura selectiva siempre decide basado en una condición verdadera,aunque esta sea falsa a simple vista:

Me explico,cuando un lenguaje de programación elige una acción se basa en una decisión verdadera,lógica booleana,verdadero o falso,en este caso en lua solo admite,false o true:

Vamos a ver unos ejemplos:

1 es igual a 1 -- Es verdadero

2 es igual a 1 -- Es falso

1 no es igual a 2 -- Es falso

1 es menor a 10 -- Verdadero

1 es mayor a 10 -- Falso


Para usar esto en lua se usan los simbolos de asociacion:

== -- Igual a

=~ -- No igual a

< -- Menor a

> -- Mayor a

<= -- Menor o igual a

>= -- Mayor o igual a

Ahora vemos los ejemplos de arriba con simbolos

1 == 1 -- Es verdadero

2 == 1 -- Es falso

1 ~= 2 -- Es verdadero

1 < 10 -- Verdadero

1 > 10 -- Falso

Bien sabiendo eso podemos usar las elecciones de control:

Las cuales son:

Si..
Si no..
No

La sintaxis es:

if condicion then -- Condición principal

elseif condicion then -- Segunda condición(opcional)

else -- Error en condicionales anteriores(opcional,es para manejo de errores)

end

Vamos a ver un ejemplo:

 uno = 1  
   
 if 1 == 1 then  
   print ("Es verdadero")  
 elseif 2 == 1 then  
   print("Es falso")  
 elseif 1 ~= 2 then  
   print ("Es verdadero")  
 elseif 1 < 10 then  
   print ("Verdadero")  
 elseif 1 > 10 then  
  print("Falso")  
 else  
   print("Otro valor")  
 end  

Si ejecutamos ese codigo obiamente no veremos la palabra es falso,ya que al ser falso no entra en la condicion,de hecho no pasa a las siguientes estructuras si encuentra una verdadera primero.

Si queremos probar todas las posibles concidencias verdaderas tendriamos que usar solo if's:

 if 1 == 1 then  
   print ("1 == 1 : Es verdadero")  
 end  
 if 2 == 1 then  
   print("2 == 1 : Es falso")  
 end  
 if 1 ~= 2 then  
   print ("1 ~= 2 : Es verdadero")  
 end  
 if 1 < 10 then  
   print ("1 < 10: Verdadero")  
 end  
 if 1 > 10 then  
   print("1 > 10 : Falso")  
 end  
   

Algo muy importante de lua es que no necesita identacion ni punto y coma,como es el caso de python en identacion(sangria) y perl(punto y coma),lua usa el estilo shell scripting o el de ruby,usa llaves de terminación,en el caso de if,else,elseif usa:

then -> end
o mas adelante veremos:

do -> end

Por ejemplo podemos hacer una if en una linea:

if 1 ~= 2 then print ("1 ~= 2 : Es verdadero") end

Pero como siempre hay reglas de una buena programación y es bueno identar,comentar,usar varias lineas,usar varios espacios de linea,etc.

Esas son las estructuras de elección,básica ahora vamos a ver las estructuras de repetición,también de elección ya que deciden igual basado en una respuesta booleana.

El primero es while,el cual repite el código hasta que su condición inicial termine,la sintaxis es:

while condicion do
    -- codigo a ejecutar
end

Con while podemos crear repeticiones infinitas (bucles infinitos),solo basta con crear una condicion infinita,una condición que no cambiara,por ejemplo:

while true do print("Bucle infinito") end

Si no tenemos una variable bandera o una terminación no esperada no terminara,a menos que cerremos el proceso del sistema.

Terminación inesperada con break:

while true do
    print ("Bucle no infinito)
    break
end

Terminación con variable bandera:

uno = 1

while uno == 1 do
    print ("Cambiamos el valor de uno,la variable que controla while")
    uno = 2
end

Bucle de repetición for,el bucle for se usa basado en una variable o variables banderas que hasta que terminen de recorrer su valor no se detendrá,la sintaxis es:

for var = inicio,final,argumento do
    -- codigo a ejecutar
end

Veamos un ejemplo de una cuenta hasta diez desde uno:

for var = 1,10 do
    print(var)
end

Una cuenta de 10 a uno:

for var = 10,1,-1 do
    print(var)
end

Una cuenta de 0 a 100 de 5 en 5:

for var = 0,100,5 do
    print(var)
end

Con un bluce while eso se puede escribir así:

var = 0
while var < 105 do
    print(var)
    var = var + 5
end

Normalmente lo que se puede hacer con un bucle se puede hacer con otro,otro ejemplo es el bucle repeat/until,solo que este es inverso al bucle while,el bucle while se rompe cuando la condición sea falsa y este se rompe cuando la condición sea verdadera:

var = 5
repeat
    print(var)
    var = var + 5
until var == 105

Pues eso es lo mas importante de las estructuras selectivas en lua,existen mas cosas como la iteracion,pero lo veremos cuando hable de funciones y tablas mas a fondo.

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.