STUDY MEMO

学習のメモ書き

<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

制御構造 (Ruby 3.0.0 リファレンスマニュアル)