Sentencia Case en Ruby.

La instrucción case en Ruby es una que me gusta mucho, sería el similar de la instrucción switch en otros lenguajes, pero a mi parecer está estructurada de una forma más legible.

Supongamos que queremos evaluar si una persona puede o no entrar a una película basándonos en su edad, bien, según Wikipedia si la película es clasificación G todos pueden entrar, PG-13 menores de 13 años con padres, R menores de 17 años con padres y NC-17 sólo mayores de edad, ¿cómo podríamos escribir un programa así en Ruby?

Si dominas la instrucción if bien podrías pensar en algo como lo siguiente.

if c == "G"
      print "Todos entran"
elsif c == "PG-13"
      print "Si eres menor de 13 años necesitas un adulto" 
elsif c == "R"
      print "Si eres menor de 17 años necesitas un adulto" 
elsif c == "NC-17"
      print "Solo mayores de 17 entran." 
end

Lo anterior solucionaría el problema, suponiendo que la variable c almacena la categoría de la película a la que se quieren entrar, la solución la enfrentamos haciendo uso de if’s anidados esto significa que si el primer if no es verdadero evaluará el siguiente elsif y así sucesivamente.

Ahora bien, aunque solucionamos el problema, queda claro que no es la mejor forma de enfrentarlo, dada la cantidad de código que hemos repetido. En estos casos, podríamos implementar un case, como en el siguiente ejemplo:

clasificacion = "G"

disponibilidad = case car
   when "G" then "Todos pueden entrar"
   when "PG-13" then "Menores de 13 con un adulto"
   when "R" then "Menores de 17 con adulto"
   when "NC-17" then "Solo mayores de edad"
   else "Error en la clasificacion"
end
print disponibilidad

Como mencionaba antes, a mi parecer, la instrucción es clara por sí sola, almacenas en una variable el resultado del case y evalúas cada posibilidad con un when, la palabra reservada then define que valor se guardará en la variable en caso de que se haya cumplido la condición.

Ahora bien, en el caso anterior vimos un ejemplo evaluando cadenas, sin embargo, la instrucción case también evalúa números y rangos, veámoslo en un ejemplo:

calificacion = 9

resultado = case calificacion
   when 0..5 then "Reprobaste"
   when 6..7 then "Apenas pasaste"
   when 8..9 then "Buen trabajo!"
   when 10 then "Excelente"
   else "Error en la calificacion recibida"
end

puts resultado

Y así de sencillo es como acomodamos la instrucción a números.

Con esto terminamos el análisis de la instrucción case y pasaremos en los siguientes artículos a ver cosas relacionadas con los ciclos.

Acerca del autor:

Programador en constante aprendizaje, futuro ing. en Desarrollo de Software. "La escuela es para socializar, internet es para aprender" Viviendo en la era javaScript.

Twitter del autor:

Leave a Reply

Your email address will not be published. Required fields are marked *