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 texteEffectuez 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
endC'est bien plus propre qu'une chaîne d'appels is_a? ou match? dans des if/elsif.
Défi
FacileLisez 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"
endCorrespondance 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"
endEssayez vous-même
input = gets.chomp
# À FAIRE : 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 notes