複数値の when
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 39/56。
単一の when 節は、カンマで区切られた複数の値のいずれに対してもマッチさせることができます。対象がいずれか1つに等しければ、そのブランチが実行されます。
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # 週末これは if/elsif で || をチェーンするよりもはるかにクリーンです。
1つの when 内で値の型を混ぜることもできます。文字列、範囲(range)、正規表現パターンなど、これらはすべて === に応答するオブジェクトに過ぎません:
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各 `branch` が一目で読みやすくなるような形式を選択してください。
チャレンジ
簡単1文字(1行の入力)を読み込みます。複数の値を持つ when branches を備えた case を使用して、次のいずれかを出力してください:
vowel: 入力がa, e, i, o, uのいずれかである場合(大文字・小文字を区別しないため、まず入力を小文字に変換します)digit: 入力が0..9のいずれかである場合(範囲を使用します)punctuation: 入力が.,,,!,?のいずれかである場合other: それ以外の場合
入力は1文字の文字列として扱ってください。digit の分岐は "0".."9" のような範囲を使用してテストしてください。
入力が E の場合、出力は vowel になります。7 の場合は digit、! の場合は punctuation になります。
自分で試してみよう
ch = gets.chomp
# TODO: case ch.downcase ... で複数値の when ブランチを使う
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ