🎛️

if文以外の条件分岐

2021/02/07に公開

普段条件分岐を書くときは"if"しか使っていないのですが、条件分岐を記述する構文は他にもいくつか合ったのでここにまとめておこうと思います。

case

caseは3つ以上の条件を指定する時に見やすい構文です。
if文でも3つ以上の条件を記述することはできますが、elsifを重ねるよりもシンプルに、見やすくコードを書くことができます。

構文は以下の通りです。

case 対象のオブジェクトや式
when1
 # 値1に一致する場合に実行する処理
when2
 # 値2に一致する場合に実行する処理
when3
 # 値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