質問: 0){ $(this).show(); } } } } }else{ $(this).hide(); } }); setTimeout(function(){displayTimer()}, reload_time);//再起呼び出し }); ```
回答: ネストが深いと、テストもやりづらくバグの温床にもなりやすいです。 このような場合は早期リターンを使えばネストが下げられます。 例えば最初のif文の判定を反転させて、elseの処理を先に持って行きて処理1を実行後すぐに関数を抜けます。そうすると、elseが不要になるのでネストがひとつ減ります。 ``` $(elem).foreach(function(){ var aaa = "moji", bbb = "moji", aa = true, bb = true, a = 1, b = 1, c = 1, d = 1, e = 1; if(!(aa || aaa.match("hoge"))){ //処理1 return; } if((a >= 0 && b >= 0) || (a <= 0 && b <= 0)){ //処理1 }else if(a <= 0 && b >= 0){ //処理2 if(bb && b <= c){ if(bbb.match("fuga")){ //処理3 if(e%2 == 0){ //処理4 } }else{ //処理1 if(e%2 == 0){ //処理2 } } } } }); ``` 以下同様に整理を続けると下記のようになります。 ``` $(elem).foreach(function(){ var aaa = "moji", bbb = "moji", aa = true, bb = true, a = 1, b = 1, c = 1, d = 1, e = 1; if(!(aa || aaa.match("hoge"))){ //処理1 return; } if (a >= 0 && b >= 0) { //処理1 return; } if (a <= 0 && b <= 0){ //処理1 return; } if(!(a <= 0 && b >= 0)){ return; } //処理2 if (!(bb && b <= c)) return; if(!(bbb.match("fuga"))){ //処理1 if(!(e%2 == 0)) return; //処理2 return; } //処理3 if(!(e%2 == 0)) return; //処理4 }); ``` 判定の反転には、否定を用いていますが、本来は適切に修正する必要があります 他にも判定式を関数にする方法だとか、処理の中で場合分けする方法も用いればかなりスッキリかけると思いますが、関数に意味がある名前をつける必要があり、今回のソースコードではそれができませんでした。