9.1. case

Se utiliza la sentencia case para comprobar una secuencia de condiciones. Superficialmente se parece al switch de C y Java pero es considerablemente más potente como veremos.


ruby> i=8
8
ruby> case i
ruby| when 1, 2..5
ruby|   print "1..5\n"
ruby| when 6..10
ruby|   print "6..10\n"
ruby| end
6..10
nil

2..5 es una expresión que representa un rango entre 2 y 5 inclusive. La siguiente expresión verifica si el valor i cae dentro del rango:


(2..5) === i

La sentencia case utiliza internamente el operador === para verificar las distintas condiciones. Dentro de la naturaleza orientada a objetos de Ruby, === lo interpreta el objeto que aparece en la condición when. Por ejemplo, el código que sigue comprueba en el primer when la igualdad de cadenas y en el segundo la coincidencia con una expresión regular.


ruby> case 'abcdef'
ruby| when 'aaa', 'bbb'
ruby|   print "aaa o bbb\n"
ruby| when /def/
ruby|   print "incluye /def/\n"
ruby| end
incluye /def/
nil