キミのif文、美しくない。。
こんにちは。
映画エクスマキナを観て余韻に浸っている、開発担当のトキです。AI役のソノヤ・ミズノさんにやられました。
さて、今日はif文について学んだことをまとめてみます。
- 条件分岐で無駄なネストはしない
- なぜダメなのか
- 解決策
条件分岐で無駄なネストはしない
新卒で今の会社に入社して間もなく、僕の書いたコードを上司にレビューしていただくことがあったのですが、コードを一目見て上司がおっしゃられたことが今も忘れられません。
「... 美しくない。」
そのとき、僕が書いたコードの問題の部分を晒したいと思います。
if ( a == 'A' ) { if ( b == 'B' ) { if ( c == 'C' ) { if ( d == 'D' ) { //処理 } } } }
わかりやすくするために単純にしましたが、こんな感じで条件分岐させていました。
上司はこの箇所を見て、条件分岐ではできるだけネストさせない方がいい、ということをおっしゃいました。
なぜダメなのか
こんなコード見せられたら、読む側は脳内メモリを持ってかれます。
読む側は、falseの際の処理が何なのかってことが気になります。ネストが深くなればなるほど、覚えておくべき情報が倍々で増えていきます。
では、どうしたら人に優しく書けるでしょうか。
解決策
除外すべき条件をまず除外します。
if ( a != 'A' ) { return; } if( b != 'B') { return; } if ( c!= 'C' ) { return; } if ( d == 'D' ) { //処理 }
もしくは、
if ( !( a == 'A' || b == 'B' || c == 'C' ) ) { return; } if ( e == 'D' ) { //処理 }
こうすることで、例えば a == 'A' の場合のことなどその行以降で考える必要はありません。
かなり脳に優しくなりました。
ということで、
今日はif文は可能な限りネストさせないという事について書いてみました。
最後までご覧いただきありがとうございました。
もし間違ってる箇所などあれば、コメントなどいただけると幸いです。