Menu
Coddy logo textTech

Case com Classes e Regex

Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 38 de 56.

Você usou case com intervalos. A mesma instrução também faz a correspondência com classes e expressões regulares: ambos por meio do operador === que o when chama nos bastidores.

Faça a correspondência por classe para ramificar com base no tipo de valor que você recebeu:

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)      # a whole number
puts describe(3.14)    # a decimal
puts describe("hi")    # some text

Faça a correspondência com uma regex para ramificar com base no formato de uma string, um número de telefone, um e-mail, uma data:

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

Isso é muito mais limpo do que uma cadeia de chamadas is_a? ou match? em if/elsif.

challenge icon

Desafio

Fácil

Leia uma única linha de entrada. Use uma instrução case para imprimir um desses rótulos com base na aparência da entrada:

  • Todos os dígitos, number
  • Contém @: email
  • Começa com uma letra maiúscula, name
  • Qualquer outra coisa, unknown

Verifique as regras na ordem listada (então 123 é number, não unknown; kevin@coddy.tech é email; Alice é name).

Para a entrada kevin@coddy.tech, a saída é email.

Folha de consulta

O case/when do Ruby faz a correspondência com classes e expressões regulares usando === por baixo dos panos.

Correspondência por classe:

case value
when Integer then "a whole number"
when Float   then "a decimal"
when String  then "some text"
else              "something else"
end

Correspondência 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

Experimente você mesmo

input = gets.chomp

# TODO: case input ... quando /^\d+$/, /@/, /^[A-Z]/ ... senão ... fim
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo