Rangos en Case / When
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 8 de 56.
Los rangos destacan dentro de la sentencia case de Ruby. Mientras que muchos lenguajes necesitan una cadena de if/elsif con operadores de comparación, Ruby te permite comparar un valor contra rangos directamente.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CInternamente, when 70..79 utiliza el operador === del rango, que es equivalente a (70..79).include?(score).
La forma case es más corta, más fácil de leer y más rápida de escribir que una larga secuencia if/elsif.
Desafío
FácilLee una lista de edades enteras separadas por comas. Para cada edad, clasifícala con una sentencia case usando rangos:
0..12:Child13..19:Teen20..64:Adult65o superior:Senior- Cualquier otra cosa (negativo): omitido, no entra en el informe
Imprime una línea de recuento para cada categoría que no sea cero, en este orden fijo: Child, Teen, Adult, Senior. Omite las categorías con cero personas. Después de los recuentos, imprime Skipped: <n> donde n es el número de edades negativas (inválidas).
Para la entrada 5,15,30,70,-3,40,12, la salida es:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Hoja de referencia
Usa rangos en sentencias case — Ruby compara mediante === (equivalente a include?):
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CPruébalo tú mismo
ages = gets.chomp.split(",").map(&:to_i)
# TODO: clasificar cada edad con case + rangos, contar por categoría, imprimir informe
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline