JavaScriptで多重ループを抜けるラベル構文について

最近、改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用までという本を読んでいるのですが、ES2015も含めたJavaScriptについて本格的に書かれてあって、とても分かりやすいです。

JavaScriptはある程度分かっていたつもりなのですが、それでもこういうまとまった本を読むと、何個かは知らなかった記述がでてきます(ES2015についてはほとんど知らないことばかりですが)。

今回はその中で、2.5.8に記載されていた多重ループを一気に抜けるラベル構文についてメモ。調べてみたら、よくある記述らしいんで、ブログに書こうか迷ったのですが、前に多重ループを抜けるときは匿名関数にして即時実行したほうがいいというようなことを書いてしまったので……。
for文の二重ループを一重ループにする方法 | while(isプログラマ)

で、上記記事に書いた多重ループの抜ける方法をラベル構文で書くと下記のようになる。

var mulArr = [ 
    [1*1,1*2,1*3,1*4,1*5,1*6,1*7,1*8,1*9],
    [2*1,2*2,2*3,2*4,2*5,2*6,2*7,2*8,2*9],
    [3*1,3*2,3*3,3*4,3*5,3*6,3*7,3*8,3*9],
    [4*1,4*2,4*3,4*4,4*5,4*6,4*7,4*8,4*9],
    [5*1,5*2,5*3,5*4,5*5,5*6,5*7,5*8,5*9],
    [6*1,6*2,6*3,6*4,6*5,6*6,6*7,6*8,6*9],
    [7*1,7*2,7*3,7*4,7*5,7*6,7*7,7*8,7*9],
    [8*1,8*2,8*3,8*4,8*5,8*6,8*7,8*8,8*9],
    [9*1,9*2,9*3,9*4,9*5,9*6,9*7,9*8,9*9]
];
var i,j;
     
// ラベル  
kuku:
for(i=0;i<9;i++){
	for(j=0;j<9;j++){
		// breakの判定
		if(mulArr[i][j]>=50){
			break kuku; // ラベルのついたループを脱出
		}
	}    
}
console.log("九九の結果が初めて50以上になるのは、" + (i+1) + "*" + (j+1) + "の時");
    //=> "九九の結果が初めて50以上になるのは、6*9の時"

変更した箇所は、最初のfor文の前に『kuku』というラベルをつけ、多重ループを抜けるときには『break kuku;』とやるだけ。上で紹介した本が改行してあったので、ラベル指定の後は改行しましたが、『kuku: for(i=0;i<9;i++){』と改行しないほうが分かりやすいかも? このラベル構文はcontinue文でも利用できるとのことで、またswitch文の中でループを抜ける際にはラベル構文でなければならないとのこと(そりゃ、switch命令内でbreakとすると、switch命令を抜けるだけですしね)。 参考:break文とcontinue文でのラベル指定 – 繰り返し処理 – JavaScript入門

改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
山田 祥寛
技術評論社
売り上げランキング: 4,391

コメント

  1. Inok より:

    Java にもありますが、嫌な構文ですね。
    if とfunction 2 つだけで同じことができます。

タイトルとURLをコピーしました