4. 条件分岐(2)
2012/11/14 シナジーマーケティング(株) 河野 健太朗
Rubyでは以下の条件分岐の構文があります。
- if
- unless
- case
4.3 if
ある条件に応じて処理の実行を振り分けたいときに使います。
if 条件A [then] # 条件Aが真の時実行される elsif 条件B [then] # 条件Bが真の時実行される else # 今までの条件に該当しない場合実行される end
ifは最初に一つだけ、elsifは複数記述できます。elseは最後に記述します。
「elsif」は「elseif」ではありませんので注意が必要です。
評価したい条件が複数ある場合には、
elsif
else
を使用します。
また、thenは省略できます。(書かない方が多いようです)
# coding: utf-8 fruit = "apple" print "#{fruit}: is " if fruit == 'apple' puts "red" elsif fruit == 'lemon' or fruit == 'banana' puts "yellow" else puts "unknown" end
> ruby if_test.rb apple: is red
4.4 unless
ifの逆で、条件が偽の時に処理が実行されます。
unless 条件 [then] # 条件が偽の時に実行される else # 条件が真の時に実行される end
if の条件を否定したものと同じですので、以下のように書くこともできます。
if !条件 [then] # 条件が偽の時に実行される else # 条件が真の時に実行される end
unless には if と異なり elsif がありません。
# coding: utf-8 fruit = "apple" print "#{fruit}: is " unless fruit == 'apple' puts "not red" else puts "red" end
> ruby unless_test.rb apple: is red
4.5 case
特定の値によって、分岐を行いたい場合にはcase式が使えます。
case 式 when 値1 [then] # 式が値1と一致する時に実行される when 値2 [then] # 式が値2と一致する時に実行される when 値3 [then] # 式が値3と一致する時に実行される when 値4 [then] # 式が値4と一致する時に実行される else # 式がどれにも一致しない時に実行される end
# coding: utf-8 number = 1 print "#{number}: " case number when 1 puts "GOLD" when 2 puts "SILVER" when 3 puts "BRONZE" else puts "UNKNOWN" end
> ruby when_test.rb 1: GOLD
when には複数の値をコンマ区切りで指定できます。
case 式 when 値1, 値2, 値3 [then] # 式が値1か値2か値3と一致する時に実行される else # 式がどれにも一致しない時に実行される end
when で指定する条件には、範囲式、正規表現も使用できます。正規表現は後の章で説明します。
4.6修飾子
if と unless は 修飾子として、式の末尾に追記することができます。
variable = value if 条件 # 条件に一致するとき、変数に値が代入される variable = value unless 条件 # 条件に一致しないとき、変数に値が代入される
4.7 条件演算子
if ~ else ~ endを簡略した記述が可能です。
条件 ? 真の時 : 偽の時
number = 1 print "#{number}: " if number % 2 == 0 puts "偶数" else puts "奇数" end puts "====================" answer = (number % 2 == 0 ? '偶数' : '奇数') puts "#{number}: #{answer}"
> ruby if_operator_test.rb 1: 奇数 ==================== 1: 奇数