JavaScript 速習チュートリアル

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. 任意のコードブロックからの脱出

breakcontinue は、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>"; // この行は実行されません
}