LoginSignup
2
3

More than 3 years have passed since last update.

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

Posted at

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 リファレンスマニュアル)

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3