Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

C言語やJavaでの「switch」文は、Rubyでは「case」文を用います。「case」文は、複数の候補の中から一致するものを探すようなシーンで便利で、他の言語を触ったことがある人であれば、基本的には「switch」文と同じものと捉えて問題ないでしょう。

この記事では、Rubyの「case」文の使い方を解説します。

case文の基本

Rubyの条件式には「case」文の他にも「if」文があります。「if」文ではAND/OR条件や、複数の条件式を組み合わせて複雑な分岐を行うことが可能ですが、一つの値に対して複数の候補の中で一致するものを探すような場合には「case」文を使用すると便利でスマートなコードになります。

Rubyの「case」文は、C言語や Java言語で使える「switch」文と似た構文をもちます。

「case」文の構文は次の通りです。

case 比較対象とする変数など
when 値1 then
  #値1と一致した時に実行される処理
when 値2 then
  #値2と一致した時に実行される処理
else
  #いずれの値に一致しない時に実行されるとき
end

このように「case」文は、比較対象とする変数の値の候補をwhen <値>で1つ以上指定していき、比較対象の変数と一致するwhen <値>があると、その下のコードブロックが実行されまます。

when <値>で指定された候補の値のいずれにも一致しない場合は、elseで指定したコードブロックが実行されます。

Rubyの「case」文は、thenキーワードを省略して次のように書くこともできます。

case 比較対象とする変数など
when 値1 
  #値1と一致した時に実行される処理
when 値2 
  #値2と一致した時に実行される処理
else
  #いずれの値に一致しない時に実行されるとき
end

case文を使ってみる

「case」文の構文を確認したところで、色々なサンプルコードを確認しならが「case」文の使い方を理解していきましょう。

以下は、文字列の変数を「case」に指定し、各when式で条件に一致する言語名を出力するサンプルコードです。

lang = "ja"

case lang
when "en"
  puts "英語"
when "ja" 
  puts "日本語"
else
  puts "それ以外の言語"
end
実行結果
-------------------
日本語

数値の範囲を指定

数値の範囲や、ある値以上・以下の条件を「case」文で指定します。値の範囲を条件に指定する時はwhen 開始…終了のように範囲オブジェクトて指定します。

value = 9

case value
when 0..10
  puts "値は0-10の範囲内です"
else
  puts "範囲外です"
end
実行結果
-------------------
値は0-10の範囲内です

開始や終了の値にnilを指定すると、以上・以下の条件を指定できます。

value = 20

case value
when nil..10
  puts "valueは10以下です"
when 11..nil
  puts "valueは11以上です"
end
実行結果
-------------------
valueは11以上です

カンマ区切りで複数の値を条件に指定

when節で指定する値は、カンマで区切って複数指定できます。

value = "ruby"case valuewhen "php", "ruby", "python"  puts "指定したプログラミング言語は、スクリプト言語です"when "java", "c", "c#"  puts "指定したプログラミング言語は、コンパイル言語です"end
実行結果-------------------指定したプログラミング言語は、スクリプト言語です

変数の型で分岐する

case文は値だけでなく、型でも分岐させることができます。

変数の型が不明な時に、型に応じで処理を振り分けるような汎用的な処理を作るときなどに便利な方法です。

次の例では、変数valueには文字列型の値が格納されているため、when Stringの型判定と一致し、画面には「String型です」と表示されます。

value = "ruby"case valuewhen Integer  puts "Integer型です"when Float  puts "Float型です"when String  puts "String型です"else  puts "それ以外の型です"end
実行結果-------------------String型です

型の判定についても、when節にカンマで区切って複数の条件指定にできます。

value = 123.456case valuewhen Integer, Float  puts "数値です"when String  puts "文字です"else  puts "それ以外の型です"end
実行結果-------------------数値です

正規表現で条件を分岐する

when節に正規表現を指定して条件分岐することも可能です。正規表現(Regexpオブジェクト)は、`““て囲われた中に指定します。

lang = "ruby on rails"case lang when /java on/  puts "java onにまっち"when /ruby on/  puts "ruby onにマッチ"else  puts "どの正規表現にもマッチしませんでした"end 
実行結果-------------------ruby onにマッチ

値が配列の中に存在するか判定する

あまり利用するシーンは少ないかもしれないが、caseで指定した変数や値が配列に含まれているかを判定できます。

次の例ではcase文で指定した値が、array1に含まれている時と、array2に含まれている時、それ以外のケースで条件分岐をするサンプルコードです。

value = 100array1 = [10, 20, 30, 40, 50]array2 = [70, 80, 90, 100, 110]case valuewhen *array1  puts "value is contained in array1"when *array2  puts "value is contained in array2"else  puts "どの配列にも含まれません"end
実行結果-------------------value is contained in array2

Rubyの「case」文には「break」は必要?

JavaやC言語での「switch」は、when節のブロックの最後にbreakが必要ですが、Rubyの「case」ではbreakを記述する必要がありません。

switch (比較対象とする変数など){  case 値1:    //値1と一致した時の処理    break;  case 値2:    //値2の一致した時の処理    break;}
ポテパンダの一言メモ

Rubyの「case」文では、breakを記述すると、逆にコンパイルエラーになるので注意しましょう。

さいごに

ほかの言語では「switch」文として使われる、Rubyの「case」文の使い方について解説していきました。

Rubyには「case」文の他に「if」構文で条件分岐も行います。この「if」と「case」文の使い分けには明確なルールは存在しませんが、最終的にコードの可読性が上がる方を選ぶのがよいでしょう。

【関連記事】
Rubyのif文で条件分岐!数値や文字列の比較方法を解説

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。