Rubyのcase/when文を完全攻略!複数条件や正規表現での分岐を初心者向けに解説
生徒
「Rubyで、ひとつの値に対してたくさんの条件で処理を分けたいときはどうすればいいですか?」
先生
「それならcase文を使うのが一番ですよ。if文をたくさんつなげるよりも、ずっとスッキリ書けます。」
生徒
「case文…ですか。難しそうですが、初心者でも使いこなせますか?」
先生
「もちろんです!複数をまとめて判定したり、便利な省略の形もあったりして、覚えると手放せなくなりますよ。」
生徒
「ぜひ教えてください!正規表現っていうのも気になります。」
先生
「いいですね。それでは基本的な書き方から、一歩進んだ実用的なテクニックまで見ていきましょう!」
1. case文とは?たくさんの条件を整理する魔法の道具
Rubyのcase文は、あるひとつのデータの中身をチェックして、その内容に応じて処理を枝分かれさせるための仕組みです。これをプログラミング用語で多方向分岐と呼びます。
例えば、信号機の色を想像してみてください。「青なら進む」「黄色なら止まる準備」「赤なら止まる」という風に、ひとつの対象(信号の色)に対して複数のパターンがあります。これをif文で書くと、何度も同じ対象の名前を書かなければなりませんが、case文なら「信号が」と最初に宣言するだけで、あとはパターンを並べるだけなので、コードが読みやすくなります。
初心者の方がパソコンを触る際に、フォルダを整理するように、プログラムも整理整頓して書くことが上達の近道です。case文はその整理整頓にとても役立つ道具なのです。
Rubyの文法を基礎からしっかり固めたい人や、 現場で役立つ「テスト駆動開発」の考え方まで身につけたい人には、 評価の高いこの一冊がおすすめです。
プロを目指す人のためのRuby入門をAmazonで見る※ Amazon広告リンク
2. 基本の書き方とthenの省略について
case文は、case、when、else、endというキーワードを組み合わせて書きます。まず最初にcase 対象と書き、その後にwhen 値でパターンを指定します。
実は、昔の書き方や正式なルールではwhen 値 thenという風に、その後にthenを付けることができましたが、現在のRubyでは省略するのが一般的です。改行を入れれば自動的に「その次は処理」と認識してくれるからです。この省略のおかげで、見た目がとてもスッキリします。まずは、果物の名前で処理を分ける簡単な例を見てみましょう。
fruit = 'りんご'
case fruit
when 'りんご'
puts 'これは青森県の名産品です'
when 'バナナ'
puts 'フィリピン産が有名ですね'
else
puts 'その果物の情報はまだありません'
end
これは青森県の名産品です
3. 複数の条件を一度に判定する方法
プログラムを作っていると、「AかBかCなら同じ処理をしたい」という場面がよくあります。これをRubyのcase文で実現するのはとても簡単です。whenの後に、値をコンマで区切って並べるだけで、複数条件のいずれかに一致すれば実行されるようになります。
例えば、月を指定して「季節」を判定する場合を考えてみましょう。3月も4月も5月も「春」ですよね。これをひとつずつ書くのは大変ですが、コンマでつなげれば一行で済みます。初心者の方でも、これなら書き間違いを減らすことができ、効率的にプログラムを組み立てることができます。パソコンの操作で、複数のファイルを一度に選択して移動させるようなイメージに似ていますね。
month = 4
case month
when 3, 4, 5
puts '春ですね、桜が咲く季節です'
when 6, 7, 8
puts '夏ですね、海へ行きたくなります'
when 9, 10, 11
puts '秋ですね、読書の秋です'
else
puts '冬ですね、こたつが恋しいです'
end
春ですね、桜が咲く季節です
4. 正規表現マッチを使った高度な判定
Rubyのcase文が特に強力なのは、正規表現(せいきひょうげん)という仕組みがそのまま使える点です。正規表現とは、特定の文字そのものではなく「数字で始まっているか」や「メールアドレスの形式か」といった、文字のパターンを指定する高度な検索方法です。
例えば、ユーザーが入力した文字が「こんにちは」で始まるもの全てに反応させたいとき、正規表現を使えば「こんにちは」も「こんにちは!」も一括で判定できます。when /パターン/という風に、スラッシュで囲って書くのがルールです。これにより、厳密な一致だけでなく、柔軟な条件分岐ができるようになり、本物のアプリケーションに近い動きを作ることができます。
message = 'hello, ruby world'
case message
when /^hello/
puts '挨拶から始まりましたね'
when /[0-9]+/
puts '数字が含まれているようです'
else
puts '特に条件には当てはまりませんでした'
end
挨拶から始まりましたね
5. 比較演算子を使わない独自の「一致」の仕組み
case文が裏側でどのように動いているかを少し解説します。if文では「==」という記号を使って、左右が同じかどうかを確認しますが、case文は内部的に「===」演算子というものを使っています。これは「所属しているか」や「パターンに合うか」を広く判定するものです。
この仕組みのおかげで、数値の範囲を指定する範囲オブジェクトも使えます。例えば、点数が0点から59点なら赤点、といった判定も when 0..59 と書くだけで判定可能です。プログラミング未経験の方にとって、「..」という記号だけで範囲を指定できるRubyの直感的な書き方は、とても理解しやすいはずです。難しい計算式を考えなくても、見たままの意味でコードが動いてくれます。
6. elseの重要性:例外に備える安全策
case文を書くとき、最後に必ず検討してほしいのがelse(エルス)です。これは、どのwhenにも当てはまらなかった場合に実行される「最後の砦」のような場所です。日常生活で言うなら、「どれにも該当しない場合はこちらへ」という案内窓口のような役割です。
もしelseがない状態で、どの条件にも一致しない値が来た場合、プログラムは何もせずに終わってしまいます。これでは不具合なのか正常なのか分かりにくいですよね。初心者のうちは、エラーを防ぐためにも「想定外のデータが来たとき用のメッセージ」をelseに入れておくことをおすすめします。これが、安全で壊れにくいプログラムを作るための第一歩となります。
7. case文の戻り値を変数に代入するテクニック
Rubyの大きな特徴のひとつに、すべての命令が値を返すという性質があります。case文も例外ではありません。case文が実行された結果を、そのまま変数(データを保存する箱)に直接入れることができるのです。
これを使えば、条件分岐の中でわざわざ変数に代入するコードを何度も書く必要がなくなります。コードが非常に短くなり、修正も一箇所で済むため、間違いが起きにくくなります。プログラミングに慣れてくると、このように「いかにシンプルに、短く書くか」を考えるのがパズルのようで楽しくなってくるはずです。
score = 85
# 判定結果を直接 grade 変数に入れる
grade = case score
when 90..100
'素晴らしい!秀です'
when 80..89
'合格です、優です'
when 70..79
'まずまずです、良です'
else
'もう少し頑張りましょう'
end
puts "あなたの評価は:#{grade}"
あなたの評価は:合格です、優です
8. case文を使う際の注意点:順番の影響
最後に、case文を使う上での大切なルールをお伝えします。条件は上から順番に判定されるということです。もし、上の条件にも下の条件にも当てはまる値があった場合、最初に一致した上の条件の処理だけが実行されます。
例えば、範囲を指定するときに「1から100」の条件を上に書き、「50から60」の条件を下に書いてしまうと、55という数字は上の広い条件に捕まってしまい、下の条件にはたどり着けません。条件を並べるときは、より具体的、あるいは範囲が狭いものから順番に並べるのが、プログラムを正しく動かすためのコツです。こうした順番の意識を持つことが、論理的な思考を育てる練習にもなります。