Menu
Coddy logo textTech

Case / WhenにおけるRange

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

Rubyのcase文の中では、範囲(Range)が本領を発揮します。多くの言語では比較演算子を用いた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の連なりよりも短く、読みやすく、そして素早く書くことができます。

challenge icon

チャレンジ

簡単

カンマ区切りの整数の年齢リストを読み込みます。各年齢について、範囲(ranges)を使用した case 文を使って分類します:

  • 0..12: Child
  • 13..19: Teen
  • 20..64: Adult
  • 65 以上: Senior
  • その他(負の数): スキップされ、レポートには含まれません

ゼロではない各カテゴリについて、ChildTeenAdultSenior の固定順でカウント行を出力します。人数がゼロのカテゴリはスキップしてください。カウントの後に、Skipped: <n> を出力します。ここで n は負の(無効な)年齢の数です。

入力が 5,15,30,70,-3,40,12 の場合、出力は次のようになります:

Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1

チートシート

case 文で範囲(range)を使用します。Rubyは ===include? と同等)を使用してマッチングを行います:

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

自分で試してみよう

ages = gets.chomp.split(",").map(&:to_i)

# TODO: caseと範囲を使って各年齢を分類し、カテゴリごとに集計してレポートを出力する
quiz icon腕試し

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

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