dev/mom0tomo

技術メモ

Rubyのelsifとガード節について

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

# if elseを使うのに適しているものの例

if number.odd?
  # 奇数の場合の処理
else
  # 偶数の場合の処理
end

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

読んだもの

blog.livedoor.jp techracho.bpsinc.jp

学んだこと

  def display_kanri_fee # 管理費(画面表示用に整形する)
    if kanri_fee.blank? # 管理費がない場合
      '- 円' => 
    elsif kanri_fee_type.blank? # 月額/年額表示がない場合
      number_to_currency(kanri_fee, unit: '')
    else
      "#{number_to_currency(kanri_fee, unit: '')} / #{kanri_type_i18n}"
    end
  end

ガード節で書き直す

  def display_kanri_fee
    return '- 円' if kanri_feeblank?
    return number_to_currency(kanri_fee, unit: '') if kanri_fee_type.blank?
    "#{number_to_currency(kanri_fee, unit: '')} / #{kanri_type_i18n}"
  end

なるほど、わかりやすい気がする。