複数値の 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各ブランチを一目で読みやすくする形式を、どれでも選んでください。
チャレンジ
簡単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 ブランチを使用する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。