break文とcontinue文でラベルを指定する

JavaScript は任意の文に対してラベルを指定することができます。ラベルを指定しておくことで break 文や continue 文を実行したときに指定したラベルが付けられた繰り返し処理を抜けたり、次の繰り返し処理へ移動させることができます。ここでは break 文と continue 文でのラベルを指定する方法について解説します。

(Last modified: )

ラベルの設定方法

JavaScript では任意の文に対してラベルを指定することができます。書式は次の通りです。

ラベル名: 文

ラベル名には変数名と同じ識別子を指定します。(識別子については「変数名のルールとよく使われる命名記法」を参照して下さい)。

下記は while 文に対して myLoop というラベル名のラベルを付けた場合です。

int count = 1;

myLoop: while (count < 10){
  count++;
}

ラベルはどの文に対しても付けることができますが、ラベルを利用できるのは break 文と continue 文だけなので、結果的に switch 文か for 文や while 文などの繰り返し処理で使う文に付けることになります。

break文でのラベルの指定

break 文でラベルを利用する場合は、次の書式を利用します。

break ラベル名;

break 文はラベルを付けずに実行した場合、 break 文が記述されている最も内側の繰り返し処理が終了し次の処理へ移ります。それに対してラベル付きの break 文を実行した場合には指定されたラベルが付けられた文の次へ処理を移すことができます。

※ break 文の基本的な使い方については「break文の使い方」を参照されてください。

最初にラベルを使用しない場合を確認します。次のサンプルを見てください。

for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){
    if ( i * j > 5){
      break;
    }

    console.log(i + '*' + j + ' = ' + i * j);
  }
  // break が実行されるとここへ処理が移動する
}

2 つの for 文の内側に break 文が記述されています。 break 文はラベルを指定していないと、最も内側の繰り返し処理の次へ処理が移りますので、上記の場合は内側の for 文の次へ処理が移ります。

実際に先ほどのサンプルを実行してみると、次のようにコンソールに出力されます。

for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){
    if ( i * j > 5){
      break;
    }

    console.log(i + '*' + j + ' = ' + i * j);
  }
  // break が実行されるとここへ処理が移動する
}

>> 1*1 = 1
>> 1*2 = 2
>> 1*3 = 3
>> 2*1 = 2
>> 2*2 = 4
>> 3*1 = 3

次にラベルを使用した場合を確認します。次のサンプルを見てください。

loop: for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){
    if ( i * j > 5){
      break loop;
    }

    console.log(i + '*' + j + ' = ' + i * j);
  }
}
// break が実行されるとここへ処理が移動する

2 つの for 文の内側に break 文が記述されています。 break 文はラベル loop を指定しているので break 文が実行されるとラベル loop が付けられた外側の for 文の次へ処理が移ります。

実際に先ほどのサンプルを実行してみると、次のようにコンソールに出力されます。

loop: for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){
    if ( i * j > 5){
      break loop;
    }

    console.log(i + '*' + j + ' = ' + i * j);
  }
}
// break が実行されるとここへ処理が移動する

>> 1*1 = 1
>> 1*2 = 2
>> 1*3 = 3
>> 2*1 = 2
>> 2*2 = 4

ラベル付きの break 文が実行された時点で、外側の for 文の次へ処理が移っていることが確認できました。

continue文でのラベルの指定

continue 文でラベルを利用する場合は、次の書式を利用します。

continue ラベル名;

continue 文はラベルを付けずに実行した場合、 continue 文が記述されている一番内側の繰り返し処理の残りの処理をスキップし、次の繰り返し処理へ移すことができます。それに対してラベル付きの continue 文を実行した場合には指定されたラベルが付けられた文の次の繰り返し処理へ移すことができます。

※ continue 文の基本的な使い方については「continue文の使い方」を参照されてください。

最初にラベルを使用しない場合を確認します。次のサンプルを見てください。

for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){  // continue が実行されるとここへ移動
    if ( (i * j) % 2 == 0){
      continue;
    }
    console.log(i + '*' + j + ' = ' + i * j);
  }
}

2 つの for 文の内側に continue 文が記述されています。 continue 文はラベルを指定していないと、一番内側の繰り返し処理の残りの処理をスキップし、次の繰り返し処理へ移りますので、上記の場合は内側の for 文の条件式の評価へ処理が移ります。

実際に先ほどのサンプルを実行してみると、次のようにコンソールに出力されます。

for (let i = 1; i < 4; i++){
  for (let j = 1; j < 4; j++){  // continue が実行されるとここへ移動
    if ( (i * j) % 2 == 0){
      continue;
    }
    console.log(i + '*' + j + ' = ' + i * j);
  }
}

>> 1*1 = 1
>> 1*3 = 3
>> 3*1 = 3
>> 3*3 = 9

次にラベルを使用した場合を確認します。次のサンプルを見てください。

loop: for (let i = 1; i < 4; i++){  // continue が実行されるとここへ移動
  for (let j = 1; j < 4; j++){
    if ( (i * j) % 2 == 0){
      continue loop;
    }
    console.log(i + '*' + j + ' = ' + i * j);
  }
}

2 つの for 文の内側に continue 文が記述されています。 continue 文はラベル loop を指定しているので continue 文が実行されるとラベル loop が付けられた外側の for 文の次の繰り返し処理へ移ります。

実際に先ほどのサンプルを実行してみると、次のようにコンソールに出力されます。

loop: for (let i = 1; i < 4; i++){  // continue が実行されるとここへ移動
  for (let j = 1; j < 4; j++){
    if ( (i * j) % 2 == 0){
      continue loop;
    }
    console.log(i + '*' + j + ' = ' + i * j);
  }
}

>> 1*1 = 1
>> 3*1 = 3

ラベル付きの continue 文が実行された時点で、外側の for 文の次へ繰り返し処理へ移っていることが確認できました。

-- --

break 文と continue 文でのラベルを指定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。