Case / Whenでの範囲
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 8/56。
範囲は Ruby の case 文で力を発揮します。多くの言語では比較演算子を使った if/elsif の連鎖が必要ですが、Ruby では値を範囲と直接照合できます。
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # C内部では、when 70..79 は範囲の === 演算子を使用しており、これは (70..79).include?(score) と同等です。
case形式は、長いif/elsifの連鎖よりも短く、読みやすく、すばやく書けます。
チャレンジ
簡単カンマ区切りの整数の年齢リストを読み取ります。各年齢を、rangesを使用したcase文で分類します。
0..12:Child13..19:Teen20..64:Adult65以上:Senior- その他(負の値): skipped。reportには含めません
0ではない各カテゴリについて、次の固定順序で件数の行を出力します: Child、Teen、Adult、Senior。人数が0のカテゴリは省略します。件数の後に、Skipped: <n>を出力します。ここでnは負の値(無効な年齢)の件数です。
入力が5,15,30,70,-3,40,12の場合、出力は次のようになります。
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1自分で試してみよう
ages = gets.chomp.split(",").map(&:to_i)
# TODO: case + ranges で各年齢を分類し、カテゴリごとにカウントし、レポートを出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rubyオンラインコンパイラ