Case avec classes et 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 intervalles. La même instruction fonctionne également avec les classes et les expressions régulières : toutes deux via l'opérateur === que when appelle sous le capot.
Associez 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 texteEffectuez un filtrage par motif (pattern matching) avec une expression régulière pour bifurquer selon la forme d'une chaîne, un numéro de téléphone, un e-mail, 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
endC'est beaucoup plus propre qu'une chaîne d'appels is_a? ou match? dans if/elsif.
Défi
FacileLisez une seule ligne d'entrée. Utilisez une instruction case pour afficher l'une de ces étiquettes selon ce à quoi l'entrée ressemble :
- Uniquement des chiffres,
number - Contient
@:email - Commence par une majuscule,
name - Tout autre cas,
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.
Essayez vous-même
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - Tisseur de chaînes4Blocs, Procs et Lambdas
Qu'est-ce qu'un bloc ?do..end ou accoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes, 2e partie
Hash.new avec valeurs par défautParcourir les hashesHashes imbriquésFusionner et transformerRécapitulatif - Compteur de fréquences10Projet - Dossiers des étudiants
Présentation du projetAjouter un étudiant2Plages
Qu’est-ce qu’une plage ?Méthodes des plagesPlages dans Case / WhenRécapitulatif - Exercices sur les plages5Puissance des Enumerable
Select et RejectChaînage de MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Pipeline de données8Prise de décision avancée
Case avec classes et regexwhen à plusieurs valeursOpérateur ternaireif / unless en ligneRécapitulatif – Classificateur de notesEntraînez-vous par vous-même : Compilateur Ruby en ligne