Menu
Coddy logo textTech

Case avec Classes & Regex

Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 38 sur 56.

Vous avez utilisé case avec des plages. La même instruction correspond également aux classes et aux expressions régulières : toutes deux via l'opérateur === que when appelle en coulisses.

Faites une correspondance par classe pour bifurquer selon le type de valeur reçue :

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 nombre entier
puts describe(3.14)    # un nombre décimal
puts describe("hi")    # du texte

Effectuez une correspondance avec une expression régulière pour effectuer un branchement selon la forme d'une chaîne, un numéro de téléphone, un e-mail ou une date :

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

C'est bien plus propre qu'une chaîne d'appels is_a? ou match? dans des if/elsif.

challenge icon

Défi

Facile

Lisez une seule ligne d'entrée. Utilisez une instruction case pour afficher l'une de ces étiquettes en fonction de ce à quoi l'entrée ressemble :

  • Uniquement des chiffres, number
  • Contient @ : email
  • Commence par une lettre majuscule, name
  • Tout le reste, unknown

Vérifiez les règles dans l'ordre indiqué (ainsi 123 est number, pas unknown ; kevin@coddy.tech est email ; Alice est name).

Pour l'entrée kevin@coddy.tech, la sortie est email.

Aide-mémoire

L'instruction case/when de Ruby effectue des correspondances avec des classes et des expressions régulières en utilisant === en coulisses.

Correspondance par classe :

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

Correspondance par 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

Essayez vous-même

input = gets.chomp

# À FAIRE : case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux