Menu
Coddy logo textTech

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 texto

Compara 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
end

Esto es mucho más limpio que una cadena de llamadas a is_a? o match? en if/elsif.

challenge icon

Desafío

Fácil

Lee 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"
end

Coincidencia 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"
end

Pruébalo tú mismo

input = gets.chomp

# POR HACER: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
quiz iconPonte a prueba

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