##はじめに
この記事は、Ruby/Railsの学習期間約1ヶ月の著者が書いた初投稿ものです。
謝った解釈があるかもしれませんので、その際は修正コメント等いただけると幸いです。
今回の記事は、条件分岐を学習している際に、if
とcase
のどちらを使えばいいか悩んだため、これから学習を始める方々に少しでもお力になれればと思い書きました。
(※一部訂正致しました)
##環境
macOS Big Sur 11.3
- Rubyバージョン:
2.7.2
##if文について
if文は、「もし〜だったら〜の処理をする」といいった条件に一致(true)した時に処理を実行します。
イメージは複数
です。
メリットは3つ
書きやすい
複数の比較対象を組み合わせることができる
複雑な条件を扱うのに適している
if "条件"
p "true"
else
p "false"
end
else
は省略可で、なくても大丈夫です。
elsif
を使用して、複数の条件を書くこともできます。
if "条件"
p "条件1がtrueの時"
elsif "条件2"
p "条件2がtrueの時"
elsif "条件3"
p "条件3がtrueの時"
else
p "上記の条件に該当しないfalseの時"
end
##case文について
case文は、1つの比較対象に対して複数の条件を判定する時に実行します。
イメージは単体
です。
メリットは2つ
シンプルなコードを実現できる
可読性の高い書き方ができる
case "1つの比較対象"
when "値1"
p "値1に一致"
when "値2"
p "値2に一致"
wehn "値3"
p "値3に一致"
else
p "一致しない時"
end
if文とcase文の比較
ここで3つの例を比較してみましょう。
1、まずは年齢
です
if文の場合
age = 20
if age >= 65
p "高齢者です"
elsif age >= 20
p "成人です"
elsif age >= 2
p "子供です"
else
p "幼児です"
end
caseの場合
age = 20
case age
when 65..100
p "高齢者です"
when 20..64
p "成人です"
when 2..19
p "子供です"
else
p "幼児です"
end
その年齢1つに絞ることで、シンプルで可読性がありますね。
2、次に信号の色
を例にしてみます。
if文の場合
color = "red"
if color == "red"
p "止まれ"
elsif color == "yellow"
p "注意して進むか止まれ"
elsif color == "blue"
p "進め"
else
"該当しません"
end
case文の場合
color = "red"
case color
when "red"
p "止まれ"
when "yellow"
p "注意して進むか止まれ"
when "blue"
p "進め"
else
p "該当なし"
end
if文はコードの量が多いですが、case文はシンプルですね。
3、時間(24時間)
を例にすると...
if文の場合(訂正致しまいた)
time = 7
if (0..5) === time
p "深夜です"
elsif (6..11) === time
p "午前中です"
elsif (12..18) === time
p "午後です"
elsif (9..23) === time
p "夜です"
else
p "そんな時間ありません"
end
case文の場合
time = 7
case time
when 0..5
p "深夜です"
when 6..11
p "午前中です"
when 12..18
p "午後です"
when 19..23
p "夜です"
else
p "そんな時間ありません"
end
こちらは、1つの比較対象(ここでは6という時間)に対して判定しているcase文の方がシンプルですね!
##結論
if文とcase文にはどっちが正しいと言った明確なルールはなく、どちらでも使うことができます。
ただし、今回の3つの例からもわかる通り、条件によっては可読性が変わっていきます。
けれども、おおよそは比較対象の数複数(if)or単体(case)
で判別することができると思います。
また、現職のエンジニアの人の話によると、使い分けは人それぞれの好みで、書きやすい方で書くのが良い
とのことでした。
基本的には可読性を重視して書く事を意識する
が大事だと思いました。
さいごに
今後もRuby/Railsを学習する過程で、理解を深めていき、有益な情報を発信できればと思いますので、良ければLGTMお願いします!