【Ruby入門】case の使い方(case・when を使った条件分岐まとめ)

case を使うと、プログラムの処理を条件分岐させることができます。

以下から Rubyでの「case・when」の使い方を解説していきます。

 

case の基本

「case」を使うと、「比較対象の値が○○に当てはまったら、××の処理を行う」といった制御ができます。以下のようにして、複数の条件と処理を指定するのが基本です。

case 比較対象
when 比較する値1
  比較対象が比較する値1に当てはまった場合の処理
when 比較する値2
  比較対象が比較する値2に当てはまった場合の処理
else
  どれにも当てはまらなかった場合の処理
end

 

case を使ったプログラム例

実際にプログラムを書いて動作を確認してみましょう。

 

数値を条件にする

以下は「a」の変数に入っている数値によって出力される表示を変える例。

プログラム
a = 1

case a
when 1
  p "a は 1 である"
when 2
  p "a は 2 である"
else
  p "条件に一致しない"
end
実行結果
"a は 1 である"

 

1行目で、「a」の変数に 2 をセットして確認してみると、結果が変わることが確認できます。

プログラム
a = 2

case a
when 1
  p "a は 1 である"
when 2
  p "a は 2 である"
else
  p "条件に一致しない"
end
実行結果
"a は 2 である"

 

今度は1行目で、「a」の変数に 3 をセットして確認してみると、どの条件にも一致しないため、何も表示されません。

プログラム
a = 3

case a
when 1
  p "a は 1 である"
when 2
  p "a は 2 である"
else
  p "条件に一致しない"
end
実行結果
"条件に一致しない"

 

文字列を条件にする

以下は「a」の変数に入っている文字列によって出力される表示を変える例。

プログラム
a = "grape"

case a
when "orange"
  p "a は orange である"
when "grape"
  p "a は grape である"
else
  p "条件に一致しない"
end
実行結果
"a は grape である"

 

複数の値を条件に入れる

カンマ(,)で区切ることで、複数の値を条件に入れることができます。

プログラム
a = 1

case a
when 1, 2, 3
  p "a は 1〜3 である"
when 4, 5, 6
  p "a は 4〜6 である"
else
  p "条件に一致しない"
end
実行結果
"a は 1〜3 である"

 

数値の範囲で条件を指定する

.. を使うことで、数値の範囲で条件を指定することができます。

プログラム
a = 5

case a
when 1..3
  p "a は 1〜3 である"
when 4..6
  p "a は 4〜6 である"
else
  p "条件に一致しない"
end
実行結果
"a は 4〜6 である"

 

配列を使って条件を指定する

配列の前にアスタリスク(*)をつけると、配列を使った条件指定ができます。比較対象の値が、条件で指定した配列のいずれかの要素に一致したら、それに対応した処理を行います。

プログラム
a = "apple"

array1 = ["orange", "grape", "banana"]
array2 = ["melon", "apple"]

case a
when *array1
  p "a は orange または grape または banana である"
when *array2
  p "a は melon または apple である"
else
  p "条件に一致しない"
end
実行結果
"a は melon または apple である"
メモ

配列について詳しくはこちら

 

正規表現を使って条件を指定する

スラッシュ(/)で囲むことで、正規表現を使って条件を指定することができます。

プログラム
a = "apple"

case a
when /^[a-z]+$/
  p "a は小文字である"
when /^[A-Z]+$/
  p "a は大文字である"
else
  p "条件に一致しない"
end
実行結果
"a は小文字である"
メモ

正規表現について詳しくはこちら(作成中)。

 

条件でクラスを指定する

条件でクラスを指定することもできます。

プログラム
a = 'abc'

case a
when Integer
  p "a は数値である"
when Float
  puts "a は小数である"
when String
  puts "a は文字列である"
else
  puts "条件に一致しない"
end
実行結果
"a は文字列である"

 

応用・case を if で表した場合

理解を深めるための余談になりますが、case の構文は if を使って表すこともできます。

以下の2つのプログラムは同じ動作になります。

case を使った例
a = 1

case a
when 1
  p "a は 1 である"
when 2
  p "a は 2 である"
else
  p "条件に一致しない"
end
if を使った例
a = 1

if a === 1
  p "a は 1 である"
elsif a === 2
  p "a は 2 である"
else
  p "条件に一致しない"
end

 

=== は、数値や文字列が等しいか、範囲にあるかどうか、正規表現に一致するかなどを比較対象に合わせて判定してくれるメソッドです。case を使った場合、内部では === で処理されていることによって柔軟な条件で比較できるというわけです。

if でも表すことができますが、特定のオブジェクトが条件に一致しているかどうかを調べて条件分岐させたい場合は、case のほうがよりシンプルに記述できるかと思います。

 

まとめ

以上、Rubyでの「case・when」の使い方でした!

 

ここまでの内容をまとめておきます。

  • 「case」を使うと、「比較対象の値が○○に当てはまったら、××の処理を行う」といった制御ができる。
  • 数値や文字列の比較のほか、ひとつの条件に複数の値を指定したり、数値を範囲で指定したり、配列を使った指定、正規表現・クラスでの比較も行うことができる。