ときまつ日記

プログラマ「トキ」と、広告運用「マツ」でスマホアプリを作成したり色々やっています。分かったことや進捗などをまとめるので、同じ悩みを持っている人と情報共有できればと思います。【トキ→ブログ:https://morelia.tokyo, リポジトリ:https://github.com/b07nji 】

キミのif文、美しくない。。

こんにちは。

映画エクスマキナを観て余韻に浸っている、開発担当のトキです。AI役のソノヤ・ミズノさんにやられました。

 
さて、今日はif文について学んだことをまとめてみます。

  1. 条件分岐で無駄なネストはしない
  2. なぜダメなのか
  3. 解決策

 
条件分岐で無駄なネストはしない
新卒で今の会社に入社して間もなく、僕の書いたコードを上司にレビューしていただくことがあったのですが、コードを一目見て上司がおっしゃられたことが今も忘れられません。

 
「... 美しくない。」

 
そのとき、僕が書いたコードの問題の部分を晒したいと思います。

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文は可能な限りネストさせないという事について書いてみました。

最後までご覧いただきありがとうございました。



もし間違ってる箇所などあれば、コメントなどいただけると幸いです。