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 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 - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline8Prise de décision avancée
Case avec Classes & Regexwhen à valeurs multiplesOpérateur ternaireif / unless en ligneRécapitulatif - Classificateur de notesEntraînez-vous par vous-même : Compilateur Ruby en ligne