「JavaScript/例外処理」の版間の差分

削除された内容 追加された内容
編集の要約なし
→‎forEachからの脱出: 大域脱出というより一般的な概念を導入.
82 行
try文の後にはcatch文またはfinally文のいずれか、もしくは両方を置かなければなりません。catch文を除いたtry-finally文では、例外が発生してもしなくてもfinally文は実行されますが、catch文によって例外が捕捉されないので、例外が発生した場合は以降の処理を中断します。
 
==forEachからの大域脱出==
 
例外は大域脱出に使うこともできます。大域脱出とは、入れ子になった制御構造の内側から外側に制御を戻すことです。<code>break</code>や<code>return</code>は最内側の制御構造(<code>for</code>/<code>while</code>/<code>switch</code>と関数)を抜け出すだけですが、例外を<code>throw</code>すると文や関数を超えて制御が移ります。この性質を利用すると二重以上のループや関数を脱出することができるのです。
 
JavaScript 1.6で追加された[[JavaScript/Array/prototype/forEach|forEach]]メソッドを使用すると、次のようにして[[JavaScript/Array|配列]]の各要素について処理を行うことができます。
 
116 ⟶ 119行目:
</source>
 
こうすると、配列の中から 5 という値が見つかった時点で例外を発生し、forEachメソッドの反復を抜けるため、処理に掛かる時間を短縮することができます。このテクニックは非常によく用いられます。
 
catch節は単に見せかけの例外を捕捉するだけで、そのまま以降の処理を続けますが、もし本当に意図しない例外がtry節の中で発生していたときのために、<code>throw false;</code>で投げた例外<code>e</code>が<code>false</code>になっていない場合(<code>true</code>の場合)は実際に同じ例外を再度発生させるようにしています。
 
=== 注意 ===
 
<code>some</code>や<code>indexOf</code>など、配列の要素を舐める関数をうまく使うと、例外に頼らずとも効率よく動くコードが書けることがほとんどです。例外をエラー通知以外のことに使うのは裏技的な最後の手段と捉え、極力避けましょう。
catch節は単に見せかけの例外を捕捉するだけで、そのまま以降の処理を続けますが、もし本当に意図しない例外がtry節の中で発生していたときのために、<code>throw false;</code>で投げた例外<code>e</code>が<code>false</code>になっていない場合(<code>true</code>の場合)は実際に例外を発生させるようにしています。
 
[[Category:JavaScript|れいかいしより]]