Ruby ofrece diferentes estructuras de control que nos permiten alterar el flujo de la ejecución del programa, entre ellas podemos destacar:
Las estructuras de control es una parte excencial en el desarrollo de aplicaciones, ya que, es la parte que se encarga de tomar decisiones.
En este caso no usaremos la consola interactiva para probar nuestro codigo, sino. Que crearemos un archivo con la extension “.rb” para nuestras pruebas.
La estructura de control IF, maneja el flujo de la aplicacion dependiendo de el resultado de una condicion.
Siguiendo con nuestro ejemplo del "juego RPG", cuando nuestro player esta muerto debemos realizar una accion, por lo general descontar un continue y renacer en el ultimo punto guardado.
Primer archivo: prueba_if.rb
#!/usr/bin/ruby
vida = 100
continues = 3
# pasan cosas que nos quitan vida
if vida == 0
puts "El Personaje ha muerto"
puts "Tu personaje va a revivir"
continues = continues - 1
else
puts "El juego continua con normalidad"
end
# En caso de necesitar el else if en ruby se usa la siguiente sintaxis
numero = 3
if numero > 5
puts "#{numero} es mayor que 5"
elsif numero == 3
puts "#{numero} es igual a 3"
else
puts "#{numero} es menor que 5 pero no es igual a 3"
end
Para correr el script desde la consola
ruby ~/Desktop/prueba_if.rb
El juego continua con normalidad
El numero es igual a 3
La estructura de control UNLESS, es similar a el IF en cuanto a estructura pero solo ejecuta el código si no es igual a la condición (==FALSE)
#!/usr/bin/ruby
numero = 1
unless numero == 1
puts "El número no es el 1"
else
puts "El número es el 1"
end
La respuesta en este caso sera:
ruby ~/Desktop/prueba_unless.rb
El número es el 1
En caso de tener una variable que necesitamos comprobar muchos casos, en vez de usar muchos if con elsif, seria mas natural usar la expresion case
case variable
when [condicion]
# code
when [condicion]
# code
else
# code
end
Un ejemplo mas claro del uso del case pude ser:
#!/usr/bin/ruby
edad = 5
case edad
when 0 .. 2
puts "Bebe"
when 3 .. 12
puts "Niño"
when 13 .. 18
puts "Adolescente"
else
puts "Adulto"
end