Rubyの条件分岐。if、条件演算子(三項演算子)、unless、case


Rubyでの真偽値

Ruby では false または nil だけが偽で、それ以外は 0 や空文字列も含め全て真です。

false, nil それ以外( true,0 ,空文字列など)

if

条件式に一致した場合に指定の処理を行う。

構文

if 式 [then]
  式 ...
[elsif 式 [then]
  式 ... ]
...
[else
  式 ... ]
end

[ ]は省略可能な部分です。

els e ifではなくelsif(eがない)なので、他言語経験者は注意。
最後のels e はeが必要。

例文

score = 90

if score == 100
  puts 'S'
elsif score >= 90
  puts 'A'
elsif score >= 80
  puts 'B'
else
  puts 'C'
end

# thenを使っている例
if score == 100 then
  puts 'S'
end

条件演算子(三項演算子)

判定条件や処理が短い場合に威力を発揮!見やすくなる。

構文

式1 ? 式2 : 式3
# 条件 ? ◯の場合 : ×の場合

例文

checked = true
puts checked ? "済" : "未"

# 以下の文と同じ意味。
# puts (if checked then  "済" else "未" end)

unless

if と反対。もし〜でなければ。
unlessで書ける文はifでも書けるのでお好みで。

二重否定になるとわかりにくくなるので注意。
Rubyにおけるunlessとコードの読みやすさについて|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

構文

elsif はない。
elseは省略可能。

unless 式 [then]
  式 ...
[else
  式 ... ]
end

例文

unless baby?
  # 条件式が偽(false)のの場合
  puts "ご飯を食べる"
else
  puts "ミルクを飲む"
end

case

ifとの使い分けの目安として、caseのほうは並列的な条件の場合により適していると思いますが、どうでしょうか。

swich文と同じだと思ってたんですが厳密には違うようです…
Rubyのcaseを〇〇(言語名)のswitch文だと思っている人たちにぼくから一言ガツンと申し上げたい

構文

case [式]
[when 式 [, 式] ...[, `*' 式] [then]
  式..]..
[when `*' 式 [then]
  式..]..
[else
  式..]
end

例文

os = "macOS"

case os
when "Windows"
  # 処理
when "macOS", "Unix"
  # 同じ処理をする条件をまとめて記述できる
when "Linux"
  # 処理
else
  # 処理
end

参考

制御構造 (Ruby 2.7.0 リファレンスマニュアル)
演算子式 (Ruby 2.7.0 リファレンスマニュアル)