while文は、指定された条件が真と評価される限り、コードのブロックを繰り返し実行することができます。
これは多くの種類のプログラムの基本的な構成要素であり、アイテムのリストを処理したり、ユーザーからの入力を待つなど、特定の条件が満たされる限り一連の命令を実行する必要がある場合に特に有効です。
以下は、whileループの構文です。
while (predicate) {
// 実行されるコードブロック
}
述語は、任意のブーリアン式を指定できます。
条件が真であれば、whileループ内のコードブロックが実行されます。コードブロックが実行されると、条件が再びチェックされます。もし条件がまだ真であれば、コードブロックが再び実行されます。
この処理は条件が偽になるまで続けられ、その時点でwhileループが終了し、プログラムの次のステートメントに制御が渡されます。
例えば、次のコードはwhileループを使って10からのカウントダウンを行います。
let count = 10;
while (count > 0) {
console.log(count);
count--;
}
このループは、変数countの値が0より大きい限り、コードブロックを実行します。ループの繰り返しごとに、countの値は1ずつ減らされるので、最終的には条件がfalseと評価され、ループが終了することになります。
注意しなければならないのは、whileループの条件が常にtrueの場合、決して終了しない無限ループを作り出すことです。したがって、条件が最終的にfalseに評価されるようにすることが重要です。
whileループは、配列やオブジェクトなどの他の種類のデータ構造にも使用でき、それらの要素に対して反復処理を行うことができます。たとえば、配列の値を表示するには、次のようなコードを使用します。
let arr = [1, 2, 3, 4, 5];
let i = 0;
while (i < arr.length) {
console.log(arr[i]);
i++;
}
whileループの条件は、「変数iの値が配列arrの長さより小さい」になります。この条件が成立する限りループは実行され、繰り返し実行されるたびにarr[i]の値が表示され、iの値が1ずつ増加します。
これにより、配列全体に対して繰り返し処理を行うことができます。
do-while文は、while文と似ていますが、一つだけ重要な違いがあります。それは、ループ内のコードブロックが少なくとも一度は実行されることが保証されていることです。
それでは例を見てみましょう。
let count = 1;
do {
console.log("Count is: " + count);
count++;
} while (count <= 10);
このコードでは、変数countを定義して1に初期化した後、do-whileループに入ります。ループの中では、countの値を表示し、条件(count <= 10)が偽になるまで、毎回countの値を1ずつ増やしています。
この例では、1から10までのカウントをコンソールに出力します。
TypeScriptでは、ループと組み合わせて、流れを制御するためにbreakとcontinueという2つのキーワードを使用することができます。
breakは、ループの条件が満たされる前に、ループを早期に終了させるために使用されます。break文が実行されると、ループは終了し、プログラムはループの後に来る全てのコードを実行し続けることになります。
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === 3) {
break;
}
console.log(numbers[i]);
}
この例では、ループは数字の配列を繰り返し処理し、1,2という数字を表示します。しかし、3という数字を見つけ、ifの条件が満たされると、すぐにループを抜けるので、3,4,5という数字は表示されません。
continueは、ループの反復を1回スキップするために使用されます。continue文が実行されると、ループの現在の反復はスキップされ、プログラムは次の反復を続行します。
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 1) {
continue;
}
console.log(numbers[i]);
}
この例では、numbers配列を繰り返し処理し、偶数の2と4だけを表示します。奇数の数字を見つけたら、continue文で現在の反復処理をスキップして次の処理に進みます。
Note: while文については、CS基礎/中級/制御フローで詳しく学習できます。