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
なるほど、わかりやすい気がする。