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"
endcase / whenの基本
caseの後に置いた値は、各whenと順番に比較されます。最初に一致した分岐が実行され、その後、制御はendへ移ります。
grade = "B"
case grade
when "A"
puts "Excellent"
when "B"
puts "Good"
when "C"
puts "Okay"
end1つのwhenに複数の値
1つのwhenに複数の値をカンマで区切って指定できます。どれか1つが一致すると、その分岐が実行されます。
char = "e"
case char
when "a", "e", "i", "o", "u"
puts "Vowel"
else
puts "Consonant"
endelse分岐
すべての場合に対応する分岐としてelseを追加します。elseがない場合、一致しないcaseは単にnilを返します。
code = 500
case code
when 200
puts "OK"
when 404
puts "Not Found"
else
puts "Other status"
endcaseは式
ifと同様に、caseは一致した分岐の値を返すため、そのまま代入できます。
score = 82
letter = case
when score >= 90 then "A"
when score >= 80 then "B"
else "C"
end
puts letterthenキーワード
短い分岐で、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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if、unless、三項演算子
- case/when 式
- Ruby の真偽値判定
- ガード節