プログラミングでのネストとは?

ネストとは

ネストとは、プログラムの構造が再帰的に繰り返されて記述されることを言います。再帰的という部分が肝です。Aという処理があります。Aの処理の中に同じAの処理が入っているという状態です。

実際にコードで書いてみるとこんな感じです。if文でhogeの値を確認していますが、その中でまたhogeの値の確認をしています。

if(hoge != 1){
   if(hoge != 2){
      //hogeは1でも2でもありません
   }
}

入れ子とは

ネストを日本語訳をすると「入れ子」です。入れ子とはもともと箱や器、家具などで、ある大きさの物の中にそれよりも小さな物を順番に重ねて入れていくことを指します。イメージしやすい例が「マトリョーシカ」です。大きな人形の中に小さな人形が入っていて、さらにその中に小さな人形が入っていることです。

上記の例を見てみると、if文の中にまた同じif文が入っていますね。そこが入れ子と同じということです。

やってはいけない「ネスト」

例に出したこのネストのコードは、他人が読むとかなりつらいものがあります。2つくらいならまだ読めるには読めるのですが、どんどん階層が多くなってしまうと読み辛いコードになってしまいます。

if(hoge != 1){
   if(hoge != 2){
      if(hoge != 3){
         if(hoge != 4){
            if(hoge != 5){
               //hogeは1でも2でも3でも4でも5でもありません
            }
         }
      }
   }
}

こんな感じです。こんなのソースレビューに出したら怒られます。階層化するのではなく、別の方法で処理を行うことが必要です。

for(int i = 1; i <= 5; i++){
   if(hoge != i){
      
   }
}

といった感じでfor文で回すとかにして簡略化しないとソースのメンテナンス時にどうすればいいのかわからず、うかつに触れなくなります。仕様を理解したうえで、どのように処理を書くかを考えておかないといけません。

まぁ、動けばいいやという感覚でとにかく早くコーディングを終わらせようとしてしまうとこんなことを書いてしまうことはなくは無いですね。書いた後で「あ、まずい」となって書き直したりすることもありました。今、楽をするか、後でメンテナンスを楽にするかという大きな分かれ道ですのでメンテナンスを楽にするようにした方が自分もほかの人も助かります。

コメント

タイトルとURLをコピーしました