ループ
同じ処理を条件が満たされる間繰り返し実行する制御構造
プログラミング基礎
ループとは
ループ (Loop) は、同じ処理を繰り返し実行する制御構造である。配列の全要素に対する処理、一定回数の繰り返し、条件を満たす間の継続実行など、プログラミングの基本操作を担う。
for ループ
回数が決まっている繰り返しには for を使う。
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
for は「初期化 → 条件判定 → 処理 → 更新」の 4 ステップを 1 行で表現する。
for...of ループ
配列やイテラブルの要素を順に取り出すには for...of を使う。
const fruits = ["apple", "banana", "cherry"];
for (const fruit of fruits) {
console.log(fruit);
}
インデックスが不要な場合は for...of のほうが簡潔で読みやすい。
while ループ
繰り返し回数が事前にわからない場合は while を使う。
let count = 0;
while (count < 10) {
count += Math.floor(Math.random() * 3);
}
console.log(`結果: ${count}`);
条件が最初から偽の場合、while の中身は一度も実行されない。
do...while ループ
最低 1 回は実行したい場合は do...while を使う。
let input: string;
do {
input = prompt("yes と入力してください") ?? "";
} while (input !== "yes");
ループの比較
| 種類 | 用途 | 特徴 |
|---|---|---|
| for | 回数が決まっている | インデックスを使える |
| for...of | 配列の要素を順に処理 | 簡潔で読みやすい |
| while | 条件が満たされる間 | 回数不定の繰り返し |
| do...while | 最低 1 回は実行 | 条件判定が後 |
break と continue
ループの途中で制御を変えるには break と continue を使う。
// break: ループを途中で抜ける
for (const item of items) {
if (item === target) {
console.log("見つかった");
break;
}
}
// continue: 残りの処理をスキップして次の繰り返しへ
for (const num of numbers) {
if (num < 0) continue; // 負の数はスキップ
console.log(num);
}
無限ループ
条件が常に真のループは無限ループになる。意図的に使う場合は break で脱出条件を明示する。
// 意図的な無限ループ
while (true) {
const event = await getNextEvent();
if (event.type === "shutdown") break;
processEvent(event);
}
意図しない無限ループはプログラムがフリーズする原因になる。ループ変数の更新忘れや、条件式の誤りが主な原因である。
配列メソッドとの使い分け
JavaScript / TypeScript では、配列メソッドがループの代替になる場合が多い。
const numbers = [1, 2, 3, 4, 5];
// ループ
const doubled: number[] = [];
for (const n of numbers) {
doubled.push(n * 2);
}
// 配列メソッド (同じ結果)
const doubled2 = numbers.map(n => n * 2);
| 方法 | 適するケース |
|---|---|
| for ループ | 途中で break したい、副作用がある |
| map / filter | 変換・抽出、関数型スタイル |
| reduce | 集約 (合計、グルーピング) |
| forEach | 副作用のみ (非推奨寄り) |
よくある間違い
| 間違い | 問題 | 対策 |
|---|---|---|
| off-by-one エラー | 1 回多い/少ない | 境界値をテスト |
| ループ変数の更新忘れ | 無限ループ | while には更新処理を必ず書く |
| 配列の変更中にループ | 要素のスキップ | コピーに対してループ |
ループの基礎と応用パターンは関連書籍に詳しい。
この記事は役に立ちましたか?