Case con clases y Regex
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 38 de 56.
Has usado case con rangos. La misma sentencia también coincide con clases y expresiones regulares: ambas a través del operador === que when llama internamente.
Coincide por clase para ramificar según qué tipo de valor obtuviste:
def describe(value)
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end
end
puts describe(42) # un número entero
puts describe(3.14) # un decimal
puts describe("hi") # algo de textoCompara con una expresión regular para ramificar según la forma de una cadena, un número de teléfono, un correo electrónico o una fecha:
def kind_of(text)
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end
endEsto es mucho más limpio que una cadena de llamadas a is_a? o match? en if/elsif.
Desafío
FácilLee una sola línea de entrada. Usa una instrucción case para imprimir una de estas etiquetas según lo que la entrada parezca:
- Solo dígitos:
number - Contiene
@:email - Comienza con una letra mayúscula:
name - Cualquier otra cosa:
unknown
Comprueba las reglas en el orden listado (así 123 es number, no unknown; kevin@coddy.tech es email; Alice es name).
Para la entrada kevin@coddy.tech, la salida es email.
Pruébalo tú mismo
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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 datos8Toma de decisiones avanzada
Case con clases y Regexwhen con múltiples valoresOperador ternarioif / unless en líneaRepaso - Clasificador de calificacionesPractica por tu cuenta: Compilador de Ruby online