LoginSignup
6
7

More than 3 years have passed since last update.

【Swift】三項演算子をswitch文に置き換えたら読みやすくなった

Posted at

三項演算子はよく使いますが、条件が増えるとわかりづらくなるという難点があります。
そこで、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
}

condAcondBの状態ごとにどのような値になるかが一目瞭然です。

さらに改良してみる

上のコードをさらに改良して、代入式にまとめてみます。

改良をしたコード
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)

このようにすることで、CondACondBを入力としてyの値を定める、という全体の流れを表現することができるので読みやすくなります。

まとめ

三項演算子を使っていて条件が増えた場合、switch文を使ったら条件が直感的に表現されたので読みやすいコードになりました。また、switch文は条件のすべてを列挙する必要があるため、複数の条件があったときに考慮もれの防止にも繋がります。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7