0Pricing
Ruby Academy · レッスン

case/when 式

多方向分岐です。

「case/when 式」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

多方向分岐

1つの値を複数の候補と比較する場合、長いif/elsifチェーンは煩雑になります。Rubyのcase式を使うと、多方向の分岐をすっきりと読みやすく書けます。

day = "Mon"
case day
when "Sat", "Sun"
  puts "Weekend"
else
  puts "Weekday"
end

case / whenの基本

caseの後に置いた値は、各whenと順番に比較されます。最初に一致した分岐が実行され、その後、制御はendへ移ります。

grade = "B"
case grade
when "A"
  puts "Excellent"
when "B"
  puts "Good"
when "C"
  puts "Okay"
end

1つのwhenに複数の値

1つのwhenに複数の値をカンマで区切って指定できます。どれか1つが一致すると、その分岐が実行されます。

char = "e"
case char
when "a", "e", "i", "o", "u"
  puts "Vowel"
else
  puts "Consonant"
end

else分岐

すべての場合に対応する分岐としてelseを追加します。elseがない場合、一致しないcaseは単にnilを返します。

code = 500
case code
when 200
  puts "OK"
when 404
  puts "Not Found"
else
  puts "Other status"
end

caseは式

ifと同様に、caseは一致した分岐の値を返すため、そのまま代入できます。

score = 82
letter = case
when score >= 90 then "A"
when score >= 80 then "B"
else "C"
end
puts letter

thenキーワード

短い分岐で、whenと同じ行に本体を置くにはthenを使います。

n = 3
case n
when 1 then puts "one"
when 2 then puts "two"
when 3 then puts "three"
end

範囲によるマッチング

whenにはRangeを指定できます。内部ではRubyが===演算子を使い、Rangeの===は所属を確認します。

score = 73
case score
when 90..100 then puts "A"
when 70..89 then puts "B"
when 0..69 then puts "C"
end

クラスによるマッチング

Class === objectは、objectがそのクラスのインスタンスである場合にtrueになります。そのため、型に基づいて分岐できます。

value = 3.14
case value
when Integer then puts "an integer"
when Float then puts "a float"
when String then puts "a string"
end

===の仕組み

すべてのwhenはpattern === valueを呼び出します。Range、Class、Regexpはそれぞれ便利な===の動作を定義しているため、caseはとても柔軟です。

email = "jane@example.com"
case email
when /@/ then puts "Looks like an email"
else puts "No @ sign"
end

対象値なしのcase

caseの後の値を省略すると、整理されたif/elsifのように、boolean条件を連ねてすっきり書けます。

temp = 5
case
when temp < 0 then puts "Freezing"
when temp < 15 then puts "Cold"
when temp < 25 then puts "Mild"
else puts "Warm"
end

組み合わせて使う

1つの値が判断の基準になる場合は、caseが最適です。各分岐がそれぞれ独立したboolean条件の場合は、対象値を省略した形式を使います。

role = :admin
msg = case role
when :admin then "Full access"
when :editor then "Can edit"
when :viewer then "Read only"
else "No access"
end
puts msg

クイックチェック

case/whenについての理解度を確認します。

まとめ

case式について学びました。

  • whenは最初に一致した分岐を実行し、その後endへ移ります。
  • 1つのwhenに複数の値を指定できます。
  • caseは値を返し、thenにも対応しています。
  • Range、Class、Regexpが使えるのは、whenが===を使うためです。
  • 対象値を省略した形式は、boolean条件をすっきり連ねる方法です。
n = 42
kind = case
when n.zero? then "zero"
when n.positive? then "positive"
else "negative"
end
puts kind

よくある質問

「case/when 式」レッスンは無料ですか?

はい。「case/when 式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「case/when 式」で何を学びますか?

多方向分岐です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「case/when 式」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if、unless、三項演算子
  2. case/when 式
  3. Ruby の真偽値判定
  4. ガード節
← Ruby Academyに戻る