Menu
Coddy logo textTech

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   # weekend

C'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
end

Choisissez les formes qui rendent chaque branche facile à lire d'un coup d'œil.

challenge icon

Défi

Facile

Lisez 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 suivants a, e, i, o, u (insensible à la casse, convertissez d'abord l'entrée en minuscules)
  • digit : l'entrée est l'un des suivants 0..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"
end

Vous 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"
end

Essayez vous-même

ch = gets.chomp

# À FAIRE : case ch.downcase ... avec des branches 'when' à plusieurs valeurs
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