条件分岐を実装するシチュエーションがあり、使い分けの定義が曖昧だったのでいろいろ調べてまとめてみました。
基本的な内容です。
条件分岐とは
「〜な時〜な処理をする。」というものです。点数が80点以上であればgreat、60〜80点であればgood、60以下であればbadみたいな感じで結果に応じた処理を行うものです。
if文
if 条件 then 処理 endのような感じで書きます。条件がtrueの時に処理が実装されます。
if score >= 80
puts "Great"
elsif score >= 60
puts "Good"
else
puts "Bad"
end
unless文
unless 条件 then 処理 endのような感じで書きます。条件がfalseの時に処理が実装されます。ifの逆バージョンです。
unless score >= 60
puts "合格"
else
puts "不合格"
end
case文
case 評価する式 when 条件 処理 endのような感じで書きます。最初で評価する式を定義して後から条件ごとに処理を実装します。
case score
when 80..100
puts "Great"
when 60..80
puts "Good"
else
puts "Bad"
end
なぜ使い分けるのか
使い分ける理由は「可読性」と「処理速度」です。
二分岐なのか多分岐なのかといった条件のパターンや条件式がandやorで繋ぐ複雑なパターンなのかとなどの評価の仕方によってベストプラクティスは異なります。
※ 実際にベンチマークテストを行ったわけではありません。
ifを使うべきタイミング
- 条件式が複雑なタイミング
- 処理が一行だけの場合(後置if)
unlessを使うべきタイミング
- 条件式が複雑かつ、条件式(ifを使う際)にnotが入る時
- 処理が一行だけの場合(後置unless)
caseを使うべきタイミング
- 条件式がシンプルなもの
おまけ
if文の可読性を高めるテクニックとしてガード節があります。これは、「条件に当てはまるものを早期リターンさせることで可読性を高めるテクニック」です。以下の記事が分かりやすく解説しておりますので是非参考にしてみてください。