🎛️
if文以外の条件分岐
普段条件分岐を書くときは"if"しか使っていないのですが、条件分岐を記述する構文は他にもいくつか合ったのでここにまとめておこうと思います。
case
case
は3つ以上の条件を指定する時に見やすい構文です。
if
文でも3つ以上の条件を記述することはできますが、elsif
を重ねるよりもシンプルに、見やすくコードを書くことができます。
構文は以下の通りです。
case 対象のオブジェクトや式
when 値1
# 値1に一致する場合に実行する処理
when 値2
# 値2に一致する場合に実行する処理
when 値3
# 値3に一致する場合に実行する処理
else
# どれにも一致しない場合に実行する処理
end
これだけだとわかりづらいので、具体的なコードを見てみましょう。
具体例
year = "cow"
case year
when "mouse"
puts "子年"
when "cow"
puts "丑年"
when "tiger"
puts "寅年"
when "rabbit"
puts "卯年"
when "dragon"
puts "辰年"
when "snake"
puts "巳年"
else
puts "他の年"
end
上記では、case year
の部分が条件の対象となります。そして、whenで指定した値とyearが一致するかで条件を判定してくれます。
if文と比べると記述がかなりシンプルにできそうですね。このように並列する条件が多数あるケースはcase
を使ってみるといいかも。
条件演算子(三項演算子)
最近初めてAtCorderで、競技プログラミングの問題を解いてみました。他の正解者の方のコードをみることができるのですが、自分のコードとの違いでまず目についたのがこの"条件演算子"でした。
構文は以下の通りです。
x ? y : z
この条件は以下のif文と同じ意味を持ちます。
if x
y # xが真の場合に実行する処理
else
z # xが偽の場合に実行する処理
end
具体例
dayhour = 13
slot = dayhour >= 12 ? 'PM' : 'AM'
上の記述では条件演算子を用いています。dayhour
が12より大きな場合はslot
にPMを、dayhour
が12より小さな(大きくない)場合はslot
にAMを定義しています。
普通のif文の方が自分は読みやすいですが、一分一秒を争う競技プログラミングの世界ではとにかく簡潔に記述する必要があるみたいですね。
SOTD
同じ条件分岐であっても、使う構文を選ぶことでコードの可読性が上がりうるということを学びました。今後は積極的にif以外の表現も使ってみようと思います。
Discussion