21
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyのelsifとガード節どちらを使うか

Posted at

コードレビューで、「elsifは条件が対称な場合にだけ使った方がよい」という指摘を受けた。

elsifeを使うのに適しているものの例

if number.odd?
  # 奇数の倍数の場合の処理
elsif
  # 偶数の場合の処理
else
 # それ以外(小数など)
end

このように分岐の条件に対称性がある場合はif elseを使う。
そうでない場合は、ガード説を使って早期リターンしたほうが意図が伝わりやすいという指摘だった。

比較

家賃の表示例で考えてみる。

  • 管理費なしの場合: 金額は表示しない
  • 修繕積立金なしの場合: 管理費のみ表示
  • 管理費と修繕積立金がある場合: 両方足した金額を表示

elsifを使った場合
def rent_fee
  if kanrihi.blank?
    '- 円'
  elsif shuzen_tsumitakin.blank?
    "#{kanrihi'円'}"
  else
    "#{kanrihi+shuzen_tsumitakin'円'}"
  end
end

ガード節で書き直す。

ガード節を使った場合
def rent_fee
  return '- 円' if kanrihi.blank?
  return "#{kanrihi'円'}" if shuzen_tsumitakin.blank?
  "#{kanrihi+shuzen_tsumitakin'円'}"
end

ネストが減ること、対称的な条件でないことが明らかになることから、確かに読みやすく理解しやすい。

21
12
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
21
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?