Menu
Coddy logo textTech

複数値の when

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 39/56。

1つの when 節で、カンマで区切られた複数の値のいずれかと一致させることができます。対象がいずれかの値と等しい場合に、その分岐が実行されます。

day = "Sat"
kind = case day
       when "Sat", "Sun"                          then "weekend"
       when "Mon", "Tue", "Wed", "Thu", "Fri"  then "weekday"
       end
puts kind   # weekend

これは、if/elsif文の中で||を連結するよりもずっとすっきりしています。

1つの when の中で値の型を混ぜることもできます。文字列、範囲、正規表現パターンなど、これらはすべて === に反応するものです:

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

各ブランチを一目で読みやすくする形式を、どれでも選んでください。

challenge icon

チャレンジ

簡単

1文字(入力の1行)を読み込みます。複数の値を持つ when ブランチを含む case を使用して、以下のいずれかを出力してください:

  • vowel: 入力が a, e, i, o, u のいずれかである場合(大文字小文字を区別しないため、最初に入力を小文字に変換してください)
  • digit: 入力が 0..9 のいずれかである場合(範囲を使用してください)
  • punctuation: 入力が .,!? のいずれかである場合
  • other: それ以外

入力を1文字の文字列として扱います。digit ブランチは "0".."9" のような範囲を使用してテストしてください。

入力が E の場合、出力は vowel です。7 の場合は digit! の場合は punctuation です。

チートシート

when 節では、カンマで区切ることで複数の値にマッチさせることができます:

case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end

同じ case 文の中で、文字列、範囲、正規表現パターンを混在させることができます:

case x
when 0, nil    then "empty"
when 1..9      then "small"
when /^huge:/i then "flagged huge"
end

自分で試してみよう

ch = gets.chomp

# TODO: case ch.downcase ... 複数の値を持つ when ブランチを使用する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン