コードレビューで、「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
ネストが減ること、対称的な条件でないことが明らかになることから、確かに読みやすく理解しやすい。