aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/guide/exception_handling_statements
diff options
context:
space:
mode:
Diffstat (limited to 'files/ja/web/javascript/guide/exception_handling_statements')
-rw-r--r--files/ja/web/javascript/guide/exception_handling_statements/index.html36
-rw-r--r--files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html34
-rw-r--r--files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html135
3 files changed, 205 insertions, 0 deletions
diff --git a/files/ja/web/javascript/guide/exception_handling_statements/index.html b/files/ja/web/javascript/guide/exception_handling_statements/index.html
new file mode 100644
index 0000000000..fddf6c4181
--- /dev/null
+++ b/files/ja/web/javascript/guide/exception_handling_statements/index.html
@@ -0,0 +1,36 @@
+---
+title: 例外処理文
+slug: Web/JavaScript/Guide/Exception_Handling_Statements
+---
+<h3 id=".E4.BE.8B.E5.A4.96.E5.87.A6.E7.90.86.E6.96.87" name=".E4.BE.8B.E5.A4.96.E5.87.A6.E7.90.86.E6.96.87">例外処理文</h3>
+<p><code>throw</code> 文を使用すると例外を投げることができます。また、<code>try...catch</code> 文を使用すると例外を処理することができます。</p>
+<p><code>try...catch</code> 文を使用して Java の例外を処理することもできます。この情報については <a href="/ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview/JavaScript_to_Java_Communication#JavaScript_.E3.81.A7.E3.81.AE_Java_.E3.81.AE.E4.BE.8B.E5.A4.96.E3.81.AE.E5.87.A6.E7.90.86" title="ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview/JavaScript_to_Java_Communication#JavaScript_.E3.81.A7.E3.81.AE_Java_.E3.81.AE.E4.BE.8B.E5.A4.96.E3.81.AE.E5.87.A6.E7.90.86">JavaScript での Java の例外の処理</a> および <a href="/ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview/JavaScript_to_Java_Communication" title="ja/Core_JavaScript_1.5_Guide/LiveConnect_Overview/JavaScript_to_Java_Communication">Java と JavaScript との通信</a> をご覧ください。</p>
+<ul>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/Exception_Handling_Statements/throw_Statement" title="ja/Core_JavaScript_1.5_Guide/Exception_Handling_Statements/throw_Statement">throw 文</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/Exception_Handling_Statements/try...catch_Statement" title="ja/Core_JavaScript_1.5_Guide/Exception_Handling_Statements/try...catch_Statement">try...catch 文</a></li>
+</ul>
+<h3 id=".E4.BE.8B.E5.A4.96.E3.81.AE.E7.A8.AE.E9.A1.9E" name=".E4.BE.8B.E5.A4.96.E3.81.AE.E7.A8.AE.E9.A1.9E">例外の種類</h3>
+<p>JavaScript ではほとんどどんなオブジェクトでも投げることができます。とは言っても、必ずしもすべての投げられたオブジェクトが同等に作られているわけではありません。数値や文字列をエラーとして投げる方法はよく用いられますが、特にこの用途のために作られている例外の種類のうちのどれかを使用したほうがより効率的であることがよくあります。</p>
+<ul>
+ <li>ECMAScript の例外
+ <ul>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/Error" title="ja/Core_JavaScript_1.5_Guide/Error">Error</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/EvalError" title="ja/Core_JavaScript_1.5_Guide/EvalError">EvalError</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/RangeError" title="ja/Core_JavaScript_1.5_Guide/RangeError">RangeError</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/ReferenceError" title="ja/Core_JavaScript_1.5_Guide/ReferenceError">ReferenceError</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/SyntaxError" title="ja/Core_JavaScript_1.5_Guide/SyntaxError">SyntaxError</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/TypeError" title="ja/Core_JavaScript_1.5_Guide/TypeError">TypeError</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/URIError" title="ja/Core_JavaScript_1.5_Guide/URIError">URIError</a></li>
+ </ul>
+ </li>
+ <li>DOM の例外
+ <ul>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/DOMException" title="ja/Core_JavaScript_1.5_Guide/DOMException">DOMException</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/EventException" title="ja/Core_JavaScript_1.5_Guide/EventException">EventException</a></li>
+ <li><a href="/ja/Core_JavaScript_1.5_Guide/RangeException" title="ja/Core_JavaScript_1.5_Guide/RangeException">RangeException</a></li>
+ <li>... (?)</li>
+ </ul>
+ </li>
+ <li><a href="/ja/NsIXPCException" title="ja/NsIXPCException">nsIXPCException</a> (<a href="/ja/XPConnect" title="ja/XPConnect">XPConnect</a>)</li>
+</ul>
+<p>{{ PreviousNext("JavaScript/Guide/Comments", "JavaScript/Guide/Exception_Handling_Statements/throw_Statement") }}</p>
diff --git a/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html b/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html
new file mode 100644
index 0000000000..9d98321883
--- /dev/null
+++ b/files/ja/web/javascript/guide/exception_handling_statements/throw_statement/index.html
@@ -0,0 +1,34 @@
+---
+title: throw 文
+slug: Web/JavaScript/Guide/Exception_Handling_Statements/throw_Statement
+---
+<h3 id="throw_.E6.96.87" name="throw_.E6.96.87">throw 文</h3>
+<p><code>throw</code> 文は例外を投げるために使用します。例外を投げるときは、投げたい値からなる式を指定してください。</p>
+<pre class="eval">throw expression;
+</pre>
+<p>特定の型の式だけではなく、あらゆる式を投げることができます。下記のコードは様々な型の例外を投げています。</p>
+<pre class="eval">throw "Error2";
+throw 42;
+throw true;
+throw {toString: function() { return "I'm an object!"; } };
+</pre>
+<div class="note">
+ <strong>注意:</strong>例外を投げる際にオブジェクトを指定することができます。すると、<code>catch</code> ブロックでそのオブジェクトのプロパティを参照できるようになります。次の例では <code>UserException</code> という種類の <code>myUserException</code> というオブジェクトを作ります。また、このオブジェクトを throw 文で使用します。</div>
+<pre class="eval">// UserException という種類のオブジェクトを作成
+function UserException (message)
+{
+ this.message=message;
+ this.name="UserException";
+}
+
+// 文字列として使用されるとき(例:エラーコンソール上)に
+// 例外を整形する
+UserException.prototype.toString = function ()
+{
+ return this.name + ': "' + this.message + '"';
+}
+
+// そのオブジェクトの種類のインスタンスを作成し、それを投げる
+throw new UserException("Value too high");
+</pre>
+<p>{{ PreviousNext("JavaScript/Guide/Exception_Handling_Statements", "JavaScript/Guide/Exception_Handling_Statements/try...catch_Statement") }}</p>
diff --git a/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html b/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html
new file mode 100644
index 0000000000..678cd3f38e
--- /dev/null
+++ b/files/ja/web/javascript/guide/exception_handling_statements/try...catch_statement/index.html
@@ -0,0 +1,135 @@
+---
+title: try...catch 文
+slug: Web/JavaScript/Guide/Exception_Handling_Statements/try...catch_Statement
+---
+<h3 id="try...catch_.E6.96.87" name="try...catch_.E6.96.87">try...catch 文</h3>
+
+<p><code>try...catch</code> 文はテストしたい文のブロックを指定し、さらに投げられるであろう例外に対する 1 つ以上の対処方法を指定します。例外が投げられると <code>try...catch</code> 文がそれを受け取ります。</p>
+
+<p><code>try...catch</code> 文は 1 つの <code>try</code> ブロックと 0 個以上の <code>catch</code> ブロックからなります。前者は 1 つ以上の文からなります。後者は try ブロックで例外が投げられた場合にどうするかを指定する文からなります。すなわち、成功させたい <code>try</code> ブロックと、失敗した場合にコントロールを渡す <code>catch</code> ブロックからなります。<code>try</code> ブロック内(もしくは <code>try</code> ブロック内から呼び出された関数内)のいずれかの文が例外を投げた場合、コントロールはすぐに <code>catch</code> ブロックに移ります。<code>try</code> ブロックで例外が投げられなかった場合は <code>catch</code> ブロックは飛ばされます。<code>finally</code> ブロックは <code>try</code> および <code>catch</code> ブロックが実行された後に実行されます。ただし <code>try...catch</code> 文の後に続く文より先に実行されます。</p>
+
+<p>次の例では <code>try...catch</code> 文を使用しています。この例では渡された値に基づいて配列から月の名前を取り出す関数を呼び出します。値に対応する月の数字 (1-12) がなかったら、<code>InvalidMonthNo</code> という値を持つ例外が投げられ、<code>catch</code> ブロックの中の文は <code>monthName</code> という変数に <code>unknown</code> という値をセットします。</p>
+
+<pre>function getMonthName (mo) {
+ mo=mo-1; // 月の数字を配列のインデックスに合わせる (1=Jan, 12=Dec)
+ var months=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul",
+ "Aug","Sep","Oct","Nov","Dec");
+ if (months[mo] != null) {
+ return months[mo]
+ } else {
+ throw "InvalidMonthNo"
+ }
+}
+
+try {
+// テストする文
+ monthName=getMonthName(myMonth) // 関数は例外を投げることがある
+}
+catch (e) {
+ monthName="unknown"
+ logMyErrors(e) // 例外オブジェクトをエラー処理部分に渡す
+}
+</pre>
+
+<h4 id="catch_.E3.83.96.E3.83.AD.E3.83.83.E3.82.AF" name="catch_.E3.83.96.E3.83.AD.E3.83.83.E3.82.AF">catch ブロック</h4>
+
+<p>単一の <code>catch</code> ブロックを使用すると、<code>try</code> ブロックで生じうるすべての例外を扱うことができます。また、扱う例外の種類によって <code>catch</code> ブロックをそれぞれに分けることもできます。</p>
+
+<p><strong>単一の catch ブロック</strong><br>
+ <code>try</code> ブロックで投げられるいかなる例外にも対応したエラー処理コードを実行するには、<code>try...catch</code> 文で <code>catch</code> を 1 つ使用してください。</p>
+
+<p>単一の <code>catch</code> ブロックは次のように使用します。</p>
+
+<pre>catch (catchID) {
+ statements
+}
+</pre>
+
+<p><code>catch</code> ブロックは、<code>throw</code> 文で指定された値を持つ識別子(上記の構文における <code>catchID</code>)を指定します。この識別子を使用することで投げられた例外についての情報を得ることができます。JavaScript は <code>catch</code> ブロックに入るときにこの識別子を作成します。識別子は <code>catch</code> ブロックにいる間だけ持続します。つまり、<code>catch</code> ブロックの実行が終了するとその識別子はもう使えなくなります。</p>
+
+<p>例えば、次のコードは例外を投げます。例外が生じるとコントロールが <code>catch</code> ブロックに移ります。</p>
+
+<pre>try {
+ throw "myException" // 例外を生成
+}
+catch (e) {
+// どんな例外も扱う文
+ logMyErrors(e) // 例外オブジェクトをエラー処理部分に渡す
+}
+</pre>
+
+<p><strong>複数の catch ブロック</strong><br>
+ 1 つの <code>try</code> 文に対して、複数の条件についての <code>catch</code> ブロックを使うことができます。そして、そのそれぞれがそれぞれの種類の例外を担当します。この場合、そのブロックで指定されている例外が投げられたときだけ、適切な条件の <code>catch</code> ブロックに入ることになります。すべての未指定の例外のために、すべての例外に対応した <code>catch</code> ブロックをその文の最後の catch ブロックとしてオプション的に設けることもできます。</p>
+
+<p>例えば、次の関数は 3 つの別の関数(どこかで定義済み)を呼び出します。この関数はその引数が妥当であるかを確かめます。妥当性確認関数が確認対象の構成要素が妥当でないと決定した場合、その関数は 0 を返し、該当する例外を呼び出し元に投げさせます。</p>
+
+<pre>function getCustInfo(name, id, email)
+{
+ var n, i, e;
+
+ if (!validate_name(name))
+ throw "InvalidNameException"
+ else
+ n = name;
+ if (!validate_id(id))
+ throw "InvalidIdException"
+ else
+ i = id;
+ if (!validate_email(email))
+ throw "InvalidEmailException"
+ else
+ e = email;
+ cust = (n + " " + i + " " + e);
+ return (cust);
+}
+</pre>
+
+<p>おのおのの条件の <code>catch</code> ブロックは適当な例外処理部分にコントロールを渡します。</p>
+
+<pre>try {
+// 関数は 3 つの例外を投げうる
+ getCustInfo("Lee", 1234, "lee@netscape.com")
+}
+
+catch (e if e == "InvalidNameException") {
+// 不正な名前に対しての処理部分を呼び出す
+ bad_name_handler(e)
+}
+
+catch (e if e == "InvalidIdException") {
+// 不正な ID に対しての処理部分を呼び出す
+ bad_id_handler(e)
+}
+
+catch (e if e == "InvalidEmailException") {
+// 不正なメールアドレスに対しての処理部分を呼び出す
+ bad_email_handler(e)
+}
+
+catch (e){
+// 何が起きるかはわからないが、そのログをとる
+ logError(e)
+}
+</pre>
+
+<h4 id="finally_.E3.83.96.E3.83.AD.E3.83.83.E3.82.AF" name="finally_.E3.83.96.E3.83.AD.E3.83.83.E3.82.AF">finally ブロック</h4>
+
+<p><code>finally</code> ブロックは、try および catch ブロックの実行が終わった後に実行される文からなります。ただし <code>try...catch</code> 文の後に続く文より前に実行されます。<code>finally</code> ブロックは例外が投げられても投げられなくても実行されます。例外が投げられた場合、<code>finally</code> ブロック内の文はたとえ例外処理をする catch ブロックがなくても実行されます。</p>
+
+<p><code>finally</code> ブロックを使用することで、例外発生時に適切にスクリプトを停止させることができます。例えば、スクリプトで使用していたリソースを解放する必要があるかもしれません。次の例ではファイルを開き、そのファイルを使用する文を実行します(サーバサイド JavaScript ではファイルにアクセスできます)。ファイルを開いている間に例外が投げられると、スクリプトが停止する前に <code>finally</code> ブロックがそのファイルを閉じます。</p>
+
+<pre>openMyFile();
+try {
+ writeMyFile(theData); // エラーを投げる可能性がある
+} catch(e) {
+ handleError(e); // エラーを受け取り、それを処理する
+} finally {
+ closeMyFile(); // 常にリソースを閉じる
+}
+</pre>
+
+<h4 id="try...catch_.E6.96.87.E3.81.AE.E3.83.8D.E3.82.B9.E3.83.88" name="try...catch_.E6.96.87.E3.81.AE.E3.83.8D.E3.82.B9.E3.83.88">try...catch 文のネスト</h4>
+
+<p>1 つ以上の <code>try...catch</code> 文を入れ子にすることができます。内側の <code>try...catch</code> 文に catch ブロックがない場合、囲んでいる <code>try...catch</code> 文の catch ブロックがマッチしているか確認されます。</p>
+
+<p>{{ PreviousNext("JavaScript/Guide/Exception_Handling_Statements/throw_Statement", "JavaScript/Guide/Defining_Functions") }}</p>