2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

if 〜 elseのelseは本当に必要?

Last updated at Posted at 2021-03-30

##if 〜 elseのelseが嫌い
条件分岐でif 〜 elseを使う機会がありますが、
elseが不要な場合も多いです。

個人的な印象ですが、
elseがあると、
コードが複雑な感じがします。
(else ifは、見たくもなくなる)

elseを使う場合は、
if 判定 {処理1} else {処理2}
で、処理1と処理2の処理内容が、
同レベルであるべきです。
そんな場合は、switch文の方が、可読性が高くなる場合もあります。

##elseが不要な例

func 合格判定(判定値) Bool {
    if 判定値 >= 合格基準 {
        return true //合格
    } else {
        return false //不合格
    }
}

この処理例では、プログラムとしては問題ありませんが、
「合格の判定処理」なため、
合格をメイン処理とし、
不合格をサブの処理とするべきです。

##elseを取り除いた修正案

func 合格判定(判定値) Bool {
    if 判定値 < 合格基準 {
        return false //不合格
    }

    return true //合格
}

合格判定という処理において、
不合格は、ネガティブな要素のため、
合格の手前に、振るい落とすように不合格のif文を設けます。
そして、最終的に処理が進めば、合格となるようにします。
変更案の方が、「合格の判定処理」として、
分かりやすいコードになったかと思います。

##else以外も
else ifや、if文判定時のor/and条件なども、
詰め込むとコードを書いた人にしか分からない=可読性の低下になるため、
複数の単純なif文に分解したり、判定条件を別メソッドにすると、
コードを読む人が分かりやすい=可読性の向上になります。

##可読性が高いコードを書くには
自分で書いたコードを客観的に眺めて、
分かりにくいコードになっていないか確認する癖をつけると、
一緒にプロジェクトをやっているメンバーにも、
半年後に改修を担当する自分にも、
優しいコードを書けるようになると思います。

##追記1
switch(true) イディオム考察
分岐先の処理が同レベルであることを示す、良い手法かと思いますが、
プロジェクトメンバーが理解しやすいか、同意を得られるか確認した方が良さそうです。

2
2
2

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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?