Rubyのcase-when文を完全ガイド!初心者でもわかるthen・ガード条件・パターンマッチの使い方
生徒
「Rubyで条件をたくさん分けたいとき、if文だと長くなって読みにくいんですが、もっと簡単に書ける方法はありますか?」
先生
「そのときに便利なのがcase-when文です。複数の条件をきれいに整理して書くことができますよ。」
生徒
「なるほど!if文よりも見やすいんですか?」
先生
「はい。さらにRubyではthenやガード条件、パターンマッチといった機能もあって、柔軟に使い分けられるんです。それでは基本から見ていきましょう。」
1. case-when文とは?
Rubyのcase-when文は、ひとつの値に対して複数の条件を分けて処理するための構文です。if文を何回も書くよりも、すっきりと整理できるのが特徴です。
score = 85
case score
when 100
puts "満点です!"
when 70..99
puts "合格です"
when 50..69
puts "あと少し頑張りましょう"
else
puts "不合格です"
end
合格です
このように、点数によって異なるメッセージを表示することができます。if文を連続で書くよりも、条件が整理されていて読みやすいのがわかります。
2. thenを使った省略記法
Rubyのwhenの後にthenを書くことで、処理を1行で書けます。短い処理をするときに便利です。
day = "月曜日"
case day
when "月曜日" then puts "週の始まりです"
when "金曜日" then puts "明日はお休みです"
else puts "普通の日です"
end
週の始まりです
ただし、処理が複数行になるときは改行して書いた方が読みやすいので、状況に応じて使い分けましょう。
3. ガード条件を使った柔軟な分岐
case-when文では、ifを組み合わせて「ガード条件」を追加できます。ガード条件とは、「さらに条件を絞り込むための条件」のことです。
age = 20
case age
when 0..12
puts "子どもです"
when 13..19
puts "ティーンエイジャーです"
when 20..29 if age.even?
puts "20代で偶数の年齢です"
when 20..29
puts "20代です"
else
puts "30歳以上です"
end
20代で偶数の年齢です
この例では「20代」の中でもさらに偶数の年齢かどうかを分けています。ガード条件を使うと、複雑な条件をきれいに整理して書くことができます。
4. パターンマッチの活用
Ruby 2.7以降では、case文でパターンマッチが使えるようになりました。これは、値の形や構造に応じて条件分岐できる新しい機能です。
user = {name: "太郎", age: 18}
case user
in {name: "太郎", age: 18}
puts "太郎さんは18歳です"
in {name: "花子", age: 20}
puts "花子さんは20歳です"
else
puts "データが一致しません"
end
太郎さんは18歳です
このように、ハッシュの内容をそのまま条件にして判定できます。従来のif文では煩雑になりがちな処理を、シンプルに表現できるのがメリットです。
5. 複数の値をまとめて判定する
whenではカンマで区切ることで、複数の値を同時に判定できます。
fruit = "りんご"
case fruit
when "りんご", "みかん", "ぶどう"
puts "フルーツです"
when "にんじん", "キャベツ"
puts "野菜です"
else
puts "不明です"
end
フルーツです
この書き方を覚えておくと、同じ種類に分類したい条件を簡単にまとめられます。
6. case-when文を使うときの読みやすさのコツ
初心者の方がRubyでcase-whenを使うときに気をつけると良いポイントをまとめます。
- インデントを揃えて、条件と処理を見やすくする
- 処理が短いときは
thenを活用する - 複雑な条件には
ガード条件を使う - データ構造を扱うときは
パターンマッチが便利 - 複数の値をまとめるときはカンマ区切りを活用
Rubyは「人間が読みやすいコード」を大切にしている言語なので、読みやすさを意識した書き方を心がけましょう。
まとめ
Rubyのcase-when文は、複数の条件を自然な流れで整理できる書き方として非常に便利で、if文を重ねるよりも読みやすく、処理内容も明確に表現できる構文です。特に、日常的な分岐処理やデータの分類、複雑な条件を扱う場面では、thenを使った一行記述や、ガード条件による細かい絞り込み、Ruby 2.7以降で加わったパターンマッチによる構造的な判定が非常に役立ちます。これらの組み合わせによって、単純な条件分岐からハッシュや配列の構造を判定するような高度な処理まで、柔軟に書けるのがRubyらしい魅力です。
また、複数の値をカンマでまとめて判定する書き方も覚えておくと、似た処理を多数書く必要がなくなるため、コードの整理と可読性向上に貢献します。読みやすいコードはそのままバグの減少にもつながり、初心者から上級者まで大切にしたいポイントです。特に全体の流れを把握しやすくするためには、インデントや改行の位置を意識し、処理内容がひと目で分かるように構造を整えることが欠かせません。
ここでは、今回の記事で扱った重要なポイントを振り返りつつ、シンプルな例を交えて再確認できるように構成しています。基本的なcase-whenの使い方に加えて、実際の開発でも活用しやすい工夫を踏まえて理解を深めていきましょう。
case-when文の復習コード
まずは、複数の条件を分けるときに最も基本となる書き方を改めて整理しておきます。Rubyの特徴である「読みやすさ」を最大限に活かせる書き方です。
value = {type: "食べ物", name: "りんご"}
case value
in {type: "食べ物", name: "りんご"}
puts "りんごは食べ物です"
in {type: "食べ物", name: "みかん"}
puts "みかんは食べ物です"
in {type: "野菜", name: "にんじん"}
puts "にんじんは野菜です"
else
puts "分類できません"
end
この例では、パターンマッチを使ってハッシュの内容に応じた処理を選び分けています。元の記事の流れに沿ったRubyの自然な書き方で、複雑な条件を扱うときに非常に役立つ表現です。
thenを使った自然な書き方
処理が短いときは、thenを活用すると読みやすく、コード量も減らせます。ひと目で結果がわかる書き方ができるため、日常的な処理で重宝します。
weather = "晴れ"
case weather
when "晴れ" then puts "おでかけ日和です"
when "雨" then puts "傘を忘れずに"
when "雪" then puts "足元に気をつけましょう"
else puts "普通の一日です"
end
実際のアプリでも利用しやすい書き方で、短い条件分岐にはとても向いています。
ガード条件でより柔軟に判定
ガード条件を組み合わせることで、同じ条件範囲の中でもさらに細かな判定ができます。特に年齢や数値の範囲を扱う場面では、より自然な表現で分岐させることが可能です。
age = 24
case age
when 20..29 if age.odd?
puts "20代で奇数の年齢です"
when 20..29
puts "20代です"
else
puts "対象外です"
end
同じ20代でも「偶数か奇数か」といった細かな違いを表現でき、より現実的な条件分岐に対応できます。
複数の値をまとめて判定する利点
カンマ区切りのwhenを使うと、同じ種類に分類したい処理をまとめて扱えるため、冗長なコードを避けることができます。これはRubyの構文の中でも特に便利なポイントで、自然な分類処理を簡潔に表現できます。
color = "赤"
case color
when "赤", "青", "黄"
puts "原色です"
when "白", "黒"
puts "ベーシックカラーです"
else
puts "その他の色です"
end
このように、色や種類をグループ分けする処理は、カンマ区切りを使うだけで格段に書きやすくなります。
生徒
「今日はcase-when文の便利さがよくわかりました!if文ばかりで書くより見通しがよくて驚きました。」
先生
「そうですね。Rubyの魅力のひとつは読みやすさです。case-when文はその特徴をよく表している構文ですよ。」
生徒
「ガード条件やパターンマッチも便利でした。実際に書いてみると理解が深まりそうです!」
先生
「ぜひ自分でもいろいろ試してみてください。同じ分岐でも複数の書き方があるので、自然と読みやすいコードを書く力がついていきますよ。」
生徒
「パターンマッチは特に面白かったです!複雑なデータを扱うときに役立ちそうですね。」
先生
「その通りです。今回学んだ内容はRubyの応用にも広がるので、ぜひ積極的に使ってみてくださいね。」