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 brillan 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 directamente con rangos.
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 # CEntre bastidores, when 70..79 utiliza el operador === del rango, que equivale a (70..79).include?(score).
La forma case es más corta, fácil de leer y rápida de escribir que una larga cadena de 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 más:Senior- Cualquier otra cosa (negativa): se omite, no se incluye en el informe
Imprime una línea de recuento para cada categoría distinta de 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 (no válidas).
Para la entrada 5,15,30,70,-3,40,12, la salida es:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Pruébalo tú mismo
ages = gets.chomp.split(",").map(&:to_i)
# TODO: clasificar cada edad con case + ranges, contar por categoría, imprimir el reporte
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
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datosPractica por tu cuenta: Compilador de Ruby online