Programación en Ruby/Estructuras de decisión e iteración

De Wikilibros, la colección de libros de texto de contenido libre.

Estructuras Simples

En Ruby, sólo nil y false son evaluados como falso, todo lo demás (incluyendo 0), es verdadero. En Ruby nil es un objeto. Puedes agregar métodos a nil como a cualquier otro objeto y puedes llamar los métodos de nil como los de cualquier otro objeto. Vamos a explorar algunas estructuras muy simples disponibles en Ruby. El ejemplo que sigue (p014estructuras.rb) muestra la estructura if else end. Es costumbre en ruby no poner paréntesis con if y while.

1 #En Ruby, nil y false son evaluados como falso
2 #todo lo demas (incluyendo 0) es verdadero.
3 # nil es un objeto
4 # if else end
5 var = 5
6 if var > 4
7   puts "La variable es mayor que 4"
8   puts "Puedo tener muchas declaraciones aqui"
9   if var == 5
10     puts "Es posible tener if y else anidados"
11   else
12     puts "Too cool"
13   end
14 else
15   puts "La variable no es mayor que 4"
16   puts "Puedo tener muchas declaraciones aqui"
17 end
18 
19 # Loops
20 var = 0
21 while var < 10
22   puts var.to_s
23   var += 1
24 end

Un ejemplo del uso de elsif está en el programa p015elsif.rb :

1 # ejemplo del uso de elsif 
2 
3 # Ejemplo original
4 puts "Hola, cual es tu nombre?"
5 STDOUT.flush
6 nombre = gets.chomp
7 puts 'Hola, ' + nombre + '.'
8 
9 if nombre == 'Juan'
10         puts 'Que bonito nombre!!'
11 else
12         if nombre == 'Ivan'
13                 puts 'Ivan es Juan en ruso!!'
14         end
15 end
16 
17 # Ejemplo modificado usando elsif
18 puts "Hola, cual es tu nombre?"
19 STDOUT.flush
20 nombre = gets.chomp
21 puts 'Hola, ' + nombre + '.'
22 
23 if nombre == 'Juan'
24         puts 'Que bonito nombre!!'
25 elsif nombre == 'Ivan'
26         puts 'Ivan es Juan en ruso!!'
27 end
28 
29 # Otra modificacion
30 puts "Hola, cual es tu nombre?"
31 STDOUT.flush
32 nombre = gets.chomp
33 puts 'Hola, ' + nombre + '.'
34 
35 # || es el operador logico 'o'
36 if nombre == 'Juan' || nombre == 'Ivan'
37         puts 'Que bonito nombre!!'
38 end

Algunos operadores condicionales comunes son: ==, != <=, >=, <, > Ruby tiene también una forma negativa de if. La estructura unless comienza con la palabra unless y termina con end. El cuerpo es el texto que aparece en medio de las dos. A menos que la expresión que continúe a la palabra unless sea verdadera, el cuerpo es ejecutado, de lo contrario el intérprete lo ignora.

1 unless ARGV.length == 2
2   puts "Usage: program.rb 23 45"
3   exit
4 end

En el programa anterior, el cuerpo es ejecutado a menos que el número de elementos en el array sea igual a 2. El método Kernel.exit termina el programa, regresando un valor de status al sistema operativo. Loops como while están disponibles. Observa el siguiente ejemplo:

1 #Loops
2 
3 var = 0
4 while var < 10
5   puts var.to_s
6   var += 1
7 end

1.Escribe un programa (p016bisiesto.rb) que pregunte al usuario un año cualquiera y determine si es bisiesto o no. 2.Escribe un método llamado bisiesto que acepte un año, determine si es bisiesto y calcule el número total de minutos para ese año. (p017metodobisiesto)

Para determinar si un año es bisiesto: 1.Si el año es divisible ente 4, ve al paso 2. Si no, ve al paso 5. 2.Si el año es divisible ente 100, ve al paso 4. Si no, ve al paso 5. 3.Si el año es divisible ente 400, ve al paso 4. Si no, ve al paso 5. 4.El año es bisiesto. (Tiene 366 días). 5.El año no es bisiesto. (Tiene 365 días).


Expresiones case Esta estructura funciona de manera muy similar a una serie de expresiones if: te permite enumerar una serie de condiciones y ejecutar una expresión que corresponda al primer valor que sea verdadero. Por ejemplo, los años bisiestos deben ser divisibles entre 400 o entre 4 y no entre 100. Ten presente que case regresa el valor de la última expresión ejecutada.

1 year = 2000
2 
3 leap = case 
4        when year % 400 == 0: true
5        when year % 100 == 0: false
6        else year % 4 == 0
7        end
8 
9 puts leap
10 
11 #el resultado es: true