Menu
Coddy logo textTech

複数値の 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` が一目で読みやすくなるような形式を選択してください。

challenge icon

チャレンジ

簡単

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 ブランチを使う
quiz icon腕試し

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

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

自分で練習してみよう: Rubyオンラインコンパイラ