case文

広告

「if」文では複数の条件式を組み合わせて複雑な分岐を行う事ができますが、一つの値に対して複数の候補の中で一致するものを探すような場合には「case」文を使用すると便利です。書式は次の通りです。

case 対象オブジェクト
when 値1 then
  値1と一致する場合に行う処理
when 値2 then
  値2と一致する場合に行う処理
when 値3 then
  値3と一致する場合に行う処理
else
  どの値にも一致しない場合に行う処理
end

※「then」は省略可能です

まず比較の対象となる対象オブジェクトを指定します。例えば数値オブジェクトや文字列オブジェクトなどです。そして「when」の後に一致しているかどうかを調べる値を記述します。もし一致すれば「then」から次の「when」までの処理を実行します。

「case」文は特定のオブジェクトが持つ値がどの値に一致するのかを調べる場合に便利です。「if」文を用いて書き直すと次のようにになります。

if 対象オブジェクト === 値1 then
  値1と一致する場合に行う処理
elsif 対象オブジェクト === 値2 then
  値2と一致する場合に行う処理
elsif 対象オブジェクト === 値3 then
  値3と一致する場合に行う処理
else
  どの値にも一致しない場合に行う処理
end

ここで新しい演算子「===」が出てきましたが、文字列と文字列を比較したり数値と数値を比較する場合は「==」と同じと考えて結構です。(「===」演算子は別のページで詳しく見ていきます)。

例えば次のように使用します。

sum = 0
product = "Apple"

case product
when "Melon" then
  sum = sum + 500
when "Apple" then
  sum = sum + 150
end

print("料金は", sum, "です")

上記では変数「product」が持っている文字列に一致する値を調べ、合計金額に加算しています。

複数の値を指定する

一致しているかどうか調べる値は一度に複数指定することが可能です。

case 対象オブジェクト
when 値1,値2 then
  ...
when 値3,値4,値5 then
  ...
end

複数の値に対して同じ処理を実行する場合は、「when」の後に値をカンマ(,)で区切って並べて記述します。上記では「値1」「値2」に一致した場合は同じ処理を行い、「値3」「値4」「値5」に一致した場合は同じ処理を行います。

例えば次のように使用します。

sum = 0
product = "Apple"

case product
when "Melon","Banana" then
  sum = sum + 500
when "Apple","Lemon","Orange" then
  sum = sum + 150
end

print("料金は", sum, "です")

サンプルプログラム

では簡単なプログラムで確認して見ます。

test9-1.rb

#! ruby -Ku
require "kconv"

sum = 0
product = "Apple"

print(product)
case product
when "Melon","Banana" then
  sum = sum + 500
  print(":500¥n")
when "Apple","Lemon","Orange" then
  sum = sum + 150
  print(":150¥n")
end

product = "Banana"

print(product)
case product
when "Melon","Banana" then
  sum = sum + 500
  print(":500¥n")
when "Apple","Lemon","Orange" then
  sum = sum + 150
  print(":150¥n")
end

print(Kconv.tosjis("料金は"), sum, Kconv.tosjis("円です¥n"))

上記のプログラムを「test9-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。

case文

( Written by Tatsuo Ikura )