when con múltiples valores
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 39 de 56.
Una sola cláusula when puede coincidir con cualquiera de varios valores, separados por comas. La rama se ejecuta si el sujeto es igual a cualquiera de ellos.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # weekendEsto es mucho más limpio que encadenar || en un if/elsif.
También puedes mezclar tipos de valores en un solo when: cadenas, rangos, patrones regex, todos son simplemente cosas que responden a ===:
def describe(x)
case x
when 0, nil then "empty"
when 1..9 then "small"
when 10..99 then "medium"
when /^huge:/i then "flagged huge"
end
endElige las formas que hagan que cada rama sea fácil de leer de un vistazo.
Desafío
FácilLee un solo carácter (una línea de entrada). Usa un case con ramas when de múltiples valores para imprimir uno de los siguientes:
vowel: la entrada es una dea, e, i, o, u(insensible a mayúsculas, convierte la entrada a minúsculas primero)digit: la entrada es uno de0..9(usa un rango)punctuation: la entrada es uno de.,,,!,?other: cualquier otra cosa
Trata la entrada como una cadena de un solo carácter. Prueba la rama de dígitos usando un rango como "0".."9".
Para la entrada E la salida es vowel; para 7 es digit; para ! es punctuation.
Hoja de referencia
Una cláusula when puede coincidir con múltiples valores separados por comas:
case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
endPuedes mezclar cadenas, rangos y patrones regex en el mismo case:
case x
when 0, nil then "empty"
when 1..9 then "small"
when /^huge:/i then "flagged huge"
endPruébalo tú mismo
ch = gets.chomp
# TODO: case ch.downcase ... con ramas when de múltiples valores
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 Pipeline8Toma de decisiones avanzada
Case con clases y Regexwhen con múltiples valoresOperador ternarioif / unless en líneaRepaso - Clasificador de calificaciones