※ ChatGPTを利用し、要約された質問です(原文:JSについて教えてください。)
なぜFizzBuzzの条件文を一番上にもっていかなければならないのか?
このQ&Aのポイント
FizzBuzzの条件文を一番上にもっていかないと、意図した動作が行われない可能性があります。
continue;はその位置での処理を終了し、次の繰り返しに進むため、その上の条件文が実行されなくなってしまいます。
したがって、FizzBuzzの条件文は一番上にもっていく必要があります。
// FizzBuzz
let i = 0;
while(i < 100) {
i++;
if(i % 3 === 0){
console.log('Fizz');
continue;
}
if(i % 5 === 0){
console.log('Buzz');
continue;
}
if(i % 5 === 0 && i % 3 === 0){
console.log('FizzBuzz');
continue;
}
console.log(i);
document.getElementsByClassName('js-test210')[0].innerHTML = i;
}
・
上記のように作成したのですが、
if(i % 5 === 0 && i % 3 === 0){
console.log('FizzBuzz');
continue;
}
の部分を一番上にもっていかないとこちらがうまくいかない理由がわかりますか?
・
continue; はこれ以下の処理は実行しないようにするという意味のようですが、
if内の記載以下の処理を実行しないようにするということなのでしょうか?
ただそれだともともとそれ以下に何もないですよね???
お礼
>>> 最初に「if(i % 3 === 0)」が評価され該当すると「console.log('Fizz');」を実行して continue になるので、 それ以降のループ内の処理は実行されず次のループとしてループ処理の先頭に戻ってしまいます。 真だった時のみcontinueが実行されるので真だった場合のみ100回繰り返さずに、 console.log('Fizz');だけ実行して他は一切実行せずに終了するということですね。 そして偽だったら何も行わずに次の5%のifに移りくりかえることにより、 真だった物だけ実行され偽だったものは実行されない状態を再現したのですね。 i++;はcontinueがないので必ず100回くりかえるということですね。 >>> 「if(i % 5 === 0 && i % 3 === 0)」を最初に判定すると2つの条件が友に成立した時だけif文内の処理が実行され、両方が成立しない時だけ次の判定に進み、一つずつ条件が成立する場合の処理が行われます。 プログラムは原則として上から順に実行されるので、条件判定の順番は優先されるもの、複数条件が指定されるものから順に書いていかないと、目的の処理に到達する前に他の条件に合致して処理されてしまいます。 if(i % 3 === 0){ console.log('Fizz'); continue; } if(i % 5 === 0){ console.log('Buzz'); continue; } if(i % 5 === 0 && i % 3 === 0){ console.log('FizzBuzz'); continue; } 上記の順番だと始めの二つのどちらかないしは両方が成立してしまうと、その時点で処理が終わってしまうので、 最後の処理がされることは100%ない矛盾した順番になってしまうのですね。 最後の複数条件は必ずifの先頭にないといけないかtうi++より上になってはいけないということですね。 確かにこちらは両方が真の時に実行するので片方ないしは両方が真であれば最後まで処理される前に終了しますね。