when à valeurs multiples
Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 39 sur 56.
Une seule clause when peut correspondre à n'importe laquelle de plusieurs valeurs, séparées par des virgules. La branche s'exécute si le sujet est égal à l'une d'entre elles.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # weekendC'est beaucoup plus propre que d'enchaîner || dans un if/elsif.
Vous pouvez également mélanger les types de valeurs dans un seul when : chaînes de caractères, plages, motifs regex, ce sont tous simplement des éléments qui répondent à === :
def describe(x)
case x
when 0, nil then "empty"
when 1..9 then "small"
when 10..99 then "medium"
when /^huge:/i then "flagged huge"
end
endChoisissez les formes qui rendent chaque branche facile à lire d'un coup d'œil.
Défi
FacileLisez un seul caractère (une ligne d'entrée). Utilisez un case avec des branches when à valeurs multiples pour afficher l'un des éléments suivants :
vowel: l'entrée est l'un des suivantsa, e, i, o, u(insensible à la casse, convertissez d'abord l'entrée en minuscules)digit: l'entrée est l'un des suivants0..9(utilisez une plage)punctuation: l'entrée est l'un des suivants.,,,!,?other: tout autre chose
Traitez l'entrée comme une chaîne d'un seul caractère. Testez la branche digit en utilisant une plage comme "0".."9".
Pour l'entrée E, la sortie est vowel ; pour 7, c'est digit ; pour !, c'est punctuation.
Aide-mémoire
Une clause when peut correspondre à plusieurs valeurs séparées par des virgules :
case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
endVous pouvez mélanger des chaînes de caractères, des plages et des motifs regex dans le même case :
case x
when 0, nil then "empty"
when 1..9 then "small"
when /^huge:/i then "flagged huge"
endEssayez vous-même
ch = gets.chomp
# À FAIRE : case ch.downcase ... avec des branches 'when' à plusieurs valeurs
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