ruby の case文は、「複数の条件」と「それに対応した処理」をまとめて記述します。ruby の if文より、シンプルに記述できて、プログラムの見通しも良くなります。ruby の case文で複数の条件を既述する「書き方」と「判断」をサンプルを使ってまとめます。
ruby – case文による複数の条件判断
ruby – case文の書き方
case文では、式に対する複数の条件を判断することができます。上から順に判定されます。条件を増やしたい時は「when」を追加します。続けて、条件に合致した場合の処理を書きます。条件には、数値または数値範囲、文字列や正規表現を使うことができます。複数の条件をカンマ区切りで指定することもできます。この時、個々の条件はORで判断されます。また、「その他の条件」は、「else」で指定することができます。
ruby – case文の一般的な形式
case 式
when 条件1
対応した文
...
when 条件2_1, 条件2_2, ...
対応した文
...
else
対応した文
...
end
ruby – case文の判断
caseキーワードに指定した式とwhenの条件値は、「===」で比較されます。「===」は「==」と同じような動作をしますが、状況によっては同一クラスか?・範囲内に含まれるか?などの評価を行うことができます。
プログラム
test_case1.rb
#! /usr/bin/ruby puts "input A? ABC? B?:" case (STDIN.gets).chomp when "A" puts "catch A" when "ABC" puts "catch ABC" when /^B/ puts "catch B..." else puts "other" end
test_case2.rb
#! /usr/bin/ruby
puts "input 1? 2? 3?:"
data = case (STDIN.gets).chomp.to_i
when 1, 2
"catch 1 or 2"
when 3..5
"catch 3..5"
else
"other"
end
puts data
プログラム実行
test_case1
$ ruby ./test_case1.rb input A? ABC? B?: <-Aを入力 catch A $ ruby ./test_case1.rb input A? ABC? B?: <-ABCを入力 catch ABC $ ruby ./test_case1.rb input A? ABC? B?: <-Bigを入力 catch B...
test_case2
$ ruby ./test_case2.rb puts "input 1? 2? 3?:" <-1を入力 catch 1 or 2 $ ruby ./test_case2.rb puts "input 1? 2? 3?:" <-2を入力 catch 1 or 2 $ ruby ./test_case2.rb puts "input 1? 2? 3?:" <-3を入力 catch 3..5
プログラムについて
test_case.rbでは、ruby の caseを使った複数の条件判断を、数種類ためしてみました。標準入出力STDIN.getsを使って、キーボードから入力された文字を判断します。文字が「A」または「ABC」の文字列とき、それぞれの処理として記述された「catch A」「catch ABC」を出力します。test_case2.cでは、処理は大体同じですが、条件を複数羅列したり、範囲を評価したりしました。また、caseの戻り値を取得することで、各条件でのメッセージ出力を共通処理にしました。
rubyの条件分岐処理には「if文」もありますが、複数の分岐条件が想定されている場合は「case」を使ったほうが、シンプルに記述することができます。
Ruby オススメの1冊 – 入門編 –
[amazonjs asin=”4797386290″ locale=”JP” title=”たのしいRuby 第5版”]
Ruby入門書の超ロングセラー!いちばん売れているRuby入門書の決定版。
初版から14年。改訂とともに変化しながら、ずっと読まれ続けている定番商品です。
第5版では、最新のバージョンに対応。プログラミング初心者でも読み解けるように、
チュートリアル、基礎、クラス、実践とテーマを切り分けて、平易に解説。
Rubyの基礎から応用までがわかる一冊。Amazon 商品の説明 より
![バイオインフォ 道場 [bioinfo-Dojo]](https://bioinfo-dojo.net/wp-content/uploads/2016/03/some_object_luca-bravo-alS7ewQ41M8-unsplash.jpg)

