JavaScript の break 文
1. break 文の基本
break 文は、ループ(loop)や switch 文から「飛び出す(脱出する)」ために使用されます。
このステートメントが実行されると、ループまたは switch 文の実行は即座に終了(Terminate)します。
1.1 ループ内での break
ループ内で break に遭遇すると、そのループは直ちに終了します。
プログラムの制御は、ループの直後に続くステートメントに移り、それ以降の反復(Iteration)は実行されません。
1.2 実装例
ループカウンター(i)が 3 になった時点でループを終了(ブレイク)させる例です。
for (let i = 0; i < 10; i++) {
if (i === 3) { break; }
text += "数値は " + i + "<br>";
}2. switch 文での break
これまでの章でも触れた通り、break 文は switch ブロックから脱出するためにも使用されます。switch 文において break は、一致する case が実行された後にブロックを抜ける役割を果たします。break がないと、実行は後続の case ブロックへと**「フォールスルー(Fall-through)」**してしまいます。
2.1 実装例
数値から曜日名を算出する処理における break の活用:
switch (new Date().getDay()) {
case 0:
day = "日曜日";
break;
case 1:
day = "月曜日";
break;
case 2:
day = "火曜日";
break;
case 3:
day = "水曜日";
break;
case 4:
day = "木曜日";
break;
case 5:
day = "金曜日";
break;
case 6:
day = "土曜日";
}break キーワードは、switch のフォールスルーを防ぐために不可欠です。break がない場合、式の結果と値が一致していなくても、次の case ブロック(および default ブロックが存在すればそれも)が連続して実行されてしまいます。
3. JavaScript のラベル(Labels)
ラベルを使用すると、ステートメントやコードブロックに任意の名前を付けることができます。これにより、プログラムの制御フロー、特にループ処理において特定の場所を参照することが可能になります。
3.1 構文(Syntax)
ラベルは、識別子の後にコロン(:)を付けて記述します。
ラベル名: ステートメント;ラベルはステートメントやコードブロックの前に配置します。
ラベル名: {
ステートメント
}4. ラベル付き break(Labeled Break)
ラベル付きの break を使用すると、特定のループやブロックから脱出し、制御をそのラベル付けされたステートメントへ移すことができます。
これは、入れ子(ネスト)になったループの内側から、外側のループを一度に抜け出す際に非常に便利です。
4.1 外側のループ(loop1)をブレイクする例
let text = "";
loop1: for (let j = 1; j < 5; j++) {
loop2: for (let i = 1; i < 5; i++) {
if (i === 3) { break loop1; } // loop1 全体を終了させる
text += i;
}
}4.2 内側のループ(loop2)のみをブレイクする例
let text = "";
loop1: for (let j = 1; j < 5; j++) {
loop2: for (let i = 1; i < 5; i++) {
if (i === 3) { break loop2; } // 現在の loop2 のみを終了させる
text += i;
}
}5. 任意のコードブロックからの脱出
break と continue は、JavaScript においてコードブロックから「飛び出す」ことができる唯一のステートメントです。コードブロックとは、{ と } で囲まれた範囲を指します。
通常、ラベルを指定しない break はループか switch からしか脱出できませんが、ラベルを指定することで任意のコードブロックから脱出することが可能になります。
5.1 実装例
2つ目の要素を処理した後にブロックを抜ける例:
const cars = ["BMW", "Volvo", "Saab", "Ford"];
list: {
text += cars[0] + "<br>";
text += cars[1] + "<br>";
break list; // ここで list ブロックを脱出
text += cars[2] + "<br>"; // この行は実行されません
text += cars[3] + "<br>"; // この行は実行されません
}