if,else
En Ruby, nil y false significan falso, todo lo demás (incluyendo true, 0) significan verdadero. En Ruby, nil es un objeto: por tanto, tiene sus métodos, y lo que es más, puedes añadir los métodos que se quieran.
Veamos un ejemplo de if,else:
xyz = 5 if xyz > 4 puts 'La variable xyz es mayor que 4' puts 'Puedo poner más instrucciones dentro del if' if xyz == 5 puts 'Se puede anidar un bloque if,else,end dentro de otro' else puts "Parte del bloque anidado" end else puts 'La variable xyz no es mayor que 4' puts 'También puedo poner múltiples sentencias' end
elsif
else se ejecutaba si la condición en if no se cumplía. Para poder tomar más decisiones, en función del valor de la variable, se usa elsif:
#usando if,else anidados puts 'Hola, cuál es tu nombre?' STDOUT.flush nombre = gets.chomp puts 'Hola, ' + nombre + '.' if nombre == 'Mojamuto' puts 'Pedazo de nombre!!!' else if nombre == 'Enjuto' puts '...este nombre no es moco de pavo...' end end
#usando elsif puts 'Hola, cuál es tu nombre?' STDOUT.flush nombre = gets.chomp puts 'Hola, ' + nombre + '.' if nombre == 'Mojamuto' puts 'Pedazo de nombre!!!' elsif nombre == 'Enjuto' puts '...este nombre no es moco de pavo...' end
#otra modificación, usando el || ("o" lógico) puts 'Hola, cuál es tu nombre?' STDOUT.flush nombre = gets.chomp puts 'Hola, ' + nombre + '.' if nombre = 'Mojamuto' || nombre = 'Enjuto' puts 'Pedazo de nombre!!!' end
Además de la igualdad, existen otros operadores condicionales:
== | igual |
!= | distinto |
>= | mayor o igual que |
<= | menor o igual que |
> | mayor que |
< | menor que |
case
Esta instrucción es muy parecida al if: se crean una serie de condiciones, y se ejecuta la primera condición que se cumpla. Por ejemplo:
xyz = 10
if xyz % 2 == 0
puts 'La variable xyz es par'
else
puts 'La variable xyz es impar'
end
es equivalente a:
xyz = 10 par = case when xyz % 2 == 0 then true when xyz % 2 != 0 then false end puts par
unless
Ruby tiene una forma contraria al if: la instrucción unless. Y digo contraria, por que en if se ejecutaba el bloque (do … end) si se cumplía la condición; con unless se ejecutará el bloque mientras NO se cumpla.
nombre = 'Pepe' unless nombre == 'Enjuto' puts 'Ese nombre no tiene arte ninguno' end =begin Si el nombre no es Enjuto, siempre se ejecutará el bloque. =end
Ejercicios
Escribe un método que pregunte por un año, y sea capaz de:
- decir si es, o no es bisiesto.
- poner la cantidad de minutos que tiene el año.