<Ruby> 条件分岐 〜 if, unless, case 〜
rubyの条件分岐はif、unless、caseの3種類。
使い分けとしては少ない分岐(2つ程度)であればifまたはunless、多い分岐であればcaseを使用する。
if文と後置if文
条件式の結果がfalseまたはnilの場合:nilを返す
条件式の結果がfalseまたはnil以外(true)の場合:ブロック内の処理の結果を返す
後置if(if修飾子)文の場合はif以下の文がfalseまたはnilの場合は出力されず、trueの場合ifの前に記載した処理が実行される。 右辺の条件がtrueの場合、左辺の式を評価してその結果を返し、条件がfalseの場合nil を返す。
age = 25 # if文 if age >= 20 puts "お酒が買えます。" end # 後置if文 puts "お酒が買えます。" if age >= 20
↓どちらも以下の結果が出力される。
お酒が買えます。
<補足> ifの条件部分について
rubyのtrueについて
Rubyは falseとnil が偽として扱われる。
偽でない値(false でも nil でもない値) は全て真(true)として扱われる。
条件式の結果がfalseまたはnil以外の場合、条件式がtrueとして結果を返すため、両方とも以下のような結果になる。
# 条件式に数字 p 'りんご' if 1 # "りんご" => true # 条件式に文字列 p 'りんご' if 1 # "りんご" => true
unless文(後置unless文)
unlessはifと反対で、条件式が偽の時にunless以下の処理を実行する。
unlessは式にelsifは指定できない。
後置unless(unless修飾子)は、
右辺の条件がfalseの場合:左辺の式を評価してその結果を返す
右辺の条件がtrueになった場合:nil を返す
age = 18 # if文を使った場合 if age != 20 puts "20歳ではありません" end # unlessを使った場合 unless age == 20 puts "20歳ではありません" end # 後置unlessを使った場合 puts "20歳ではありません" unless age == 20
↓どちらも以下の結果が出力される。
20歳ではありません
case
caseに定義された情報をwhenでの情報と一致するかを判定し、一致した部分の処理結果を返す。
前述した通り、多くの分岐があるときに使用されることが多い。
animal = 'うさぎ' case animal when 'いぬ' p 'やっぱ犬だよね!' when 'ねこ' p 'わかる!猫だよね!' else p '犬猫意外なのね!なるほど!' end # 結果 "犬猫意外なのね!なるほど!" => true
<補足>caseに変数を入れない
caseのあとの変数を入れない時もある。
thenは一行にまとめるために使用しているが、一行にまとめないのであれば、thenをなくして前述のように改行すればOK。詳しくは公式documentで。
drink = 150 have_money = 200 case when drink < have_money then p 'お釣りあります' when drink == have_money then p 'ちょうどです' else p '足りません' end # 結果 "お釣りあります" => true
参考文献
https://docs.ruby-lang.org/ja/latest/method/Object/c/TRUE.html