Bienvenidos una vez más a Ruby desde Cero. Hasta este capítulo hemos aprendido como instalar, configurar Ruby en nuestros computadores y conocimos un poco las variables y objetos principales del sistema.

Para este nuevo capítulo, veremos las estructuras de control del sistema donde nos pasaremos por las estructuras condicional y las estructuras iterativas. Detallando en cada una de ellas la sintaxis y demostración.

Estructuras de control.

Ruby ofrece diferentes estructuras de control que nos permiten alterar el flujo de la ejecución del programa, en este turorial veremos las siguientes.

  • Estructuras de control condicionales (IF ELSE ELSIF UNLESS CASE).
  • Estructuras de control iterativas (BUCLES).

Estructuras de control condicionales

Estas estructuras nos ofrecen alterar el funcionamiento de un procedimiento según una condición.

IF ELSE ELSIF

Estas estructuras simplemente revisan que una condición se cumpla para ejecutar una parte del código. Cabe destacar que los valores nulos (nil) o los ceros en valores numéricos se consideran valores falsos. Para empezar debemos conocer la sintaxis de este tipo de estructuras (lo que esta entre corchetes ([]) no es obligatorio).

if conditional [then]
  code...
[elsif conditional [then]
  code...]...
[else
  code...]
end

En el primer ejemplo ejecutaremos un programa sencillo de las estructuras de control para ir familiarizándonos con la sintaxis:

#!/usr/bin/ruby

name = "Ricardo"
if name == "Ricardo"
  puts "Hola Ricardo"
end

if name == "RicArDO"
  puts "Si es RicArDO"
else
  puts name + " no es igual a RicArDO"
end

y el resultado al ejecutar el Scripts es:

>> ruby Desktop/conditionalCodehero.rb
Hola Ricardo
Ricardo no es igual a RicArDO

En este ejemplo vemos cómo se ejecuta una condición sencilla y es importante destacar como influye el uso de mayúsculas y minúsculas al comparar cadena de caracteres.

A continuación mostraremos ejemplos de estructuras condicionales utilizando números y booleanos.

#!/usr/bin/ruby

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

if numero > 3
  puts "#{numero} es mayor que 3"
end

isVerdadero = false

if (!isVerdadero) and (numero >= 3)
  puts "la variable es falsa y el número es mayor o igual a 3"
end

Al ejecutar este Script tenemos como resultado lo siguiente:

$ ruby Desktop/conditionalCodehero.rb
3 es igual a 3
la variable es falsa y el número es mayor o igual a 3

En este ejemplo destacamos el uso de ELSIF para extender y hacer mas especifica la condición en el primer bloque de código y el uso de múltiples condicionales.

UNLESS

Este tipo de estructuras de control nos sirven para verificar la existencia de una variable, esto es mas fácil demostrarlo con un ejemplo:

#!/usr/bin/ruby

numero = nil
isVerdadero = false

puts "El número existe" if numero
puts "El número no existe" unless numero
puts "La variable es falsa o no existe" unless isVerdadero

numero = 3
puts "El número ahora si existe" if numero

Al ejecutar el Script obtenemos el siguiente resultado:

$ ruby Desktop/conditionalCodehero.rb
El número no existe
La variable es falsa o no existe
El número ahora si existe

En este ejemplo se imprimen las lineas sólo si la condición se cumple.

CASE

Esta estructura al igual que las anteriores simplemente revisan que las condiciones se cumpla para ejecutar una parte del código. Este tipo de estructura es bastante útil y elegante cuando se tienen varias opciones de condiciones. La sintaxis de esta estructura es la siguiente.

case expresión

[condición [, condición ...] [then]
   code ]...
[else
   code ]
end

Para familiarizarnos con la sintaxis y entender mejor esta estructura, mostraremos un ejemplo fácil.

#!/usr/bin/ruby

edad =  5
case edad
when 0 .. 2
  puts "Bebe"
when 3 .. 6
  puts "Niñito"
when 7 .. 12
  puts "Niño"
when 13 .. 18
  puts "Adolescente"
else
  puts "Adulto"
end

numero =  5
case numero
when 0 .. 2 , 4..10
  puts "el número esta entre 0 y 2 o 4 y 10"
when 3
  puts "el número es 3"
else
  puts "el número es negativo o mayor que 10"
end

nombre =  "CodeHero"
case nombre
when "CodeHero"
  puts "SI! esto es CodeHero"
else
  puts "No lo es"
end

Al ejecutar el Script tenemos como resultado:

$ ruby Desktop/conditionalCodehero.rb
Niñito
el número esta entre 0 y 2 o 4 y 10
SI! esto es CodeHero

En el ejemplo vemos que ejecutamos tres estructuras condicionales donde sacamos conclusiones interesantes de cada una de ellas. En el primero simplemente vemos la sintaxis aplicada en un ejemplo y como utilizamos objetos de rangos para comparar la variable edad. El segundo ejemplo básicamente es lo mismo, pero en ésta observamos cómo separando las condiciones por (,) logramos un (OR). Por último vemos como Ruby en los CASE permite el uso de cadena de caracteres (la mayoría de los lenguajes no aceptan esto).

Bucles

Bucles de Ruby se utilizan para ejecutar el mismo bloque de código una cantidad específica de veces. En este capítulo se detallan todas las sentencias de bucles apoyados por Ruby. Es importante tener cuidado con los bucles y asegurarse que la sentencia de parada se ejecute al menos una vez, para evitar bucles infinitos que bloqueen el sistema.

WHILE

Estos bucles o ciclos se ejecutan hasta que la condición sea verdadera. Para empezar debemos conocer la sintaxis:

while conditional [do]
  code
end

Para comprender mejor estos bucles lo demostraremos con un ejemplo fácil:

#!/usr/bin/ruby

numero = 0

while numero < 5  do
  puts("el número es: #{numero}" )
  numero = numero +1
end

Y el resultado de este Script es una recorrida por los números desde el 0 hasta que se cumpla la condición de parada, que es cuando el número sea menor a cinco.

$ ruby Desktop/conditionalCodehero.rb
el número es: 0
el número es: 1
el número es: 2
el número es: 3
el número es: 4

REPEAT

Estos bucles se ejecutan siempre al menos una vez, ya que entra en el bloque de código y al final se verifica la condición de salida. La sintaxis de este tipo de bucles es:

código while condición

O de la siguiente manera:

begin
  código
end while condición

Para demostrar el funcionamiento de estos tipos de bucles, veamos este ejemplo:

#!/usr/bin/ruby

numero = 0
begin
   puts("el número es: i = #{numero}" )
   numero +=1
end while numero < 5

Ejecutamos el Script obteniendo lo siguiente como resultado:

>> ruby Desktop/conditionalCodehero.rb
el número es: i = 0
el número es: i = 1
el número es: i = 2
el número es: i = 3
el número es: i = 4

UNTIL LOOP

Este tipo de loop se ejecuta hasta que la condición de parada sea falsa, la sintaxis se define de la siguiente manera:

until Condición [do]
  código
end

Lo demostramos con el siguiente ejemplo, en donde el bloque de código interno al bucles se ejecuta mientras el numero no sea mayor que cinco:

#!/usr/bin/ruby

numero = 0
until numero > 5  do
  puts("El número es #{numero}" )
  numero +=1
end

El resultado de este Scripts es:

ruby Desktop/conditionalCodehero.rb
El número es 0
El número es 1
El número es 2
El número es 3
El número es 4
El número es 5

FOR

Estos bucles se ejecutan una vez por cada elemento. Éstos tienen configurado un rango de valores que indican cuantas veces se va a ejecutar. Primero les definimos la sintaxis para posteriormente ir con el ejemplo y comprender mejor esto:

for variable [, variable ...] in expresión [do]
  Código
end

En el ejemplo vamos a poder ver como la variable simplemente incrementa sola, hasta cumplir con la expresión que en este caso es un objeto de tipo Rango con valores desde el 0 hasta el 3:

#!/usr/bin/ruby

for i in 0..3
   puts "El valor de la variable es: #{i}"
end

Dando como resultado lo siguiente:

$ ruby Desktop/conditionalCodehero.rb
el valor de la variable es: 0
el valor de la variable es: 1
el valor de la variable es: 2
el valor de la variable es: 3

Conclusión

En este capítulo aprendimos técnicas muy importantes del lenguaje y se los aseguro lo van a utilizar muchísimo en sus programas, por esta razón les recomiendo que practiquen hasta dominar las estructuras de control y siéntanse libres en consultar cualquier duda a través de los comentarios.

¡Hasta el próximo capítulo!