JavaScript do…while文
JavaScriptにおけるdo…while文は、特定の条件が真である限り、一連の命令を繰り返し実行する制御構造です。
しかし、通常のwhile文と異なり、do…while文では、まずブロック内のコードが実行され、その後で条件がチェックされます。これにより、条件に関係なくブロック内のコードが少なくとも一度は実行されることが保証されます。
do…while文の基本構文
JavaScriptのdo…while文は、次のように書きます。
do {
// まずここが実行される
} while (条件式);
以下の例では、変数i
の値が10より小さい間、コンソールにその値を表示し、その後でi
の値を1増やします。
let i = 0;
do {
console.log(i);
i++;
} while (i < 10);
このプログラムも、0から9までの数を順に表示します。
while文とdo...while文の違い
主な違いは、「ループが実行されるタイミング」です。
while
文では、ループが始まる前に条件をチェックします。もし初めからその条件が偽であるなら、ループ内のコードは一度も実行されません。
let i = 0;
while (i > 0) {
console.log(i); // このコードは実行されません
i++;
}
それに対してdo...while
文では、条件が偽であってもループ内のコードが最初の一回は必ず実行されます。これは、条件チェックがループの一連の命令の後、つまり各ループの最後に行われるからです。
let i = 0;
do {
console.log(i); // このコードは一度は実行されます
i++;
} while (i > 0);
簡単に言うと、違いはdo…whileは少なくとも一度は実行されることです。
注意点
do…while文を使用する際には、ループが無限に続くことを防ぐために、必ずいずれ偽となる条件式を設定する必要があります。無限ループはプログラムの処理を停止させてしまうため、適切な制御が重要です。
また、do…while文は、ブロック内のコードが必ず一度は実行されることが保証されるため、ユーザーからの入力を受け取るなど、少なくとも一度は実行したい処理に対して有用です。
練習問題
1から指定された数までの数字を順に出力するものです。
ただし、数字が3の倍数の場合は「Fizz」、5の倍数の場合は「Buzz」、3と5の両方の倍数の場合は「FizzBuzz」を出力します。
let 数値 = 1;
do {
let 出力 = "";
if (数値 % 3 == 0) {
出力 += "Fizz";
}
if (数値 % 5 == 0) {
出力 += "Buzz";
}
if (出力 == "") {
出力 = 数値;
}
console.log(出力);
数値++;
} while (数値 <= 100);
console.log("終了しました");
このコードは、1から100までの各数値に対してFizzBuzzのルールを適用します。
do...while
ループは、数値が100以下である限り続けられます。
ループ内では、まず出力文字列を初期化し、次に数値が3の倍数、5の倍数、またはその両方であるかどうかを確認します。それに応じて「Fizz」、「Buzz」、または「FizzBuzz」を出力文字列に追加します。
数値が3でも5でも割り切れない場合は、その数値自体が出力されます。それから数値を1増やします。
数値が101になったとき、ループは終了し、メッセージ”終了しました”が表示されます。
コメント