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.
Coincidencia por clase para ramificar según el tipo de valor que recibiste:
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, 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 sentencia case para imprimir una de estas etiquetas basándote en cómo se ve la entrada:
- Todo dígitos,
number - Contiene
@:email - Comienza con una letra mayúscula,
name - Cualquier otra cosa,
unknown
Verifica las reglas en el orden listado (así que 123 es number, no unknown; kevin@coddy.tech es email; Alice es name).
Para la entrada kevin@coddy.tech, la salida es email.
Hoja de referencia
El case/when de Ruby coincide con clases y expresiones regulares usando === internamente.
Coincidencia por clase:
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
endCoincidencia por regex:
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
endPruébalo tú mismo
input = gets.chomp
# POR HACER: 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
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