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, "です")
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! 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です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )