三項演算子はよく使いますが、条件が増えるとわかりづらくなるという難点があります。
そこで、switch文にしたら読みやすくなったという話です。
もともとのコード
三項演算子
let condA = true
let v = condA ? 1 : 2
条件が一つしかない場合は、三項演算子を使うとわかりやすいコードになります。
ところが、ここに新しい条件CondB
が増えると、
条件が2つある場合
let condA = true
let condB = false
let w = condA ? (condB ? 1 : 2) : 3
このように入れ子になってしまいわかりづらくなります。
switch文を使って書き換えてみる
上のコードをswitch
文で書き換えてみます。
switch文を使った場合
var x:Int
switch(condA, condB) {
case (true,true):
x = 1
case (true,false):
x = 2
case (false,true),
(false,false):
x = 3
}
condA
とcondB
の状態ごとにどのような値になるかが一目瞭然です。
さらに改良してみる
上のコードをさらに改良して、代入式にまとめてみます。
改良をしたコード
let y = { condA, condB -> Int in
switch(condA, condB) {
case (true,true):
return 1
case (true,false):
return 2
case (false,true),
(false,false):
return 3
}
}(condA, condB)
このようにすることで、CondA
とCondB
を入力としてy
の値を定める、という全体の流れを表現することができるので読みやすくなります。
まとめ
三項演算子を使っていて条件が増えた場合、switch文を使ったら条件が直感的に表現されたので読みやすいコードになりました。また、switch文は条件のすべてを列挙する必要があるため、複数の条件があったときに考慮もれの防止にも繋がります。