気の向くままに辿るIT/ICT/IoT
JavaScript

JavaScript / ラベル付き文[ break / continue ]

ホーム前へ次へ
ECMAScriptベースのJavaScriptとは?

JavaScript / ラベル付き文[ break / continue ]

ECMA-262 Edition 5.1 / ECMAScriptベースのJavaScript文法

ECMAScript / ECMA-262 Edition 5.1ベースのJavaScript文法

ラベル付きの文

 JavaScriptの、ラベル付きの文には、break 文と continue 文があります。

break 文 / continue 文

 label_dayo : 

 処理 

 JavaScriptでは、ソースコードの任意の部分に任意の名称のラベルを設定することが可能となっています。

 ラベル名の後には、コロン":"を付け、可読性も上がることもあり、ラベル名とコロンの間にはスペースを入れるのが一般的です。

 jump_da : 

 while ( 条件式 ) 

   if ( 条件式 ) continue ;

 { 

  while ( 条件式 ) 

  { 

   if ( 条件式 ) 

   { break jump_da ; } 

  } 

 } 

 このラベルの目的は、break 文や continue 文で飛び(ジャンプ)先を指定する際の目印であり、そのラベルは省略も可能となっています。

 break 文や continue 文は、ループ内で用い、ある条件下でループを強制的に抜けたい場合に使用され、ラベルを省略した場合、最も内側のループを抜けることになっている為、ラベルを使用する場合、ループがネストして(入れ子になって)いる場合により外側や全てのループを抜けたい場合や逆に内側のループに移行したい場合などに設定するといったことが可能です。

 よってこのサンプルが実際のコード上適切か否かは別として解説上は、ラベルを指定していない continue 文が実行される際には、外側の while 文において直前と同一の条件下で次のループ処理に移り、 break 文の方は、外側の while 文の外に指定したラベルがあるので外側の while 文のループ条件を再評価することになります。

 但し、ラベルを使用する場合、設定によっては、ロジックと全く無関係な位置にでもジャンプ出来てしまうこと、それによる潜在的なバグを仕込んでしまう可能性や論理矛盾のあるプログラムはプログラムとしてどうなのかという次元の話、ラベルを省略した continue 文や break 文を利用することで、まず、ほとんどの場合、事足りるはずであることなどからJavaScriptに限らず(、ラベルを使用しないと上から下にしか実行できないような構造のプログラム言語を除き)、不用意なラベルの使用は回避するのが賢明でしょう。

 ちなみにJavaScriptには、goto文はありません。

ECMA-262 Edition 5.1 訳 / 当該仕様ページ例

ECMAScriptベースのJavaScriptリファレンス

ホーム前へ次へ