JavaScript 例外処理を学ぶ ~ try…catch…finally

JavaScriptにおける例外処理(エラー処理)の使い方について解説します。

例外処理とは、プログラム実行中に発生したエラーを検知し、適切な処理を行うことを指します。

目次

例外処理とは?

 例外処理とは、プログラム実行中に発生したエラーを検知し、適切な処理を行うことを指します。これにより、プログラムの安定性を高め、予期せぬエラー発生時にも問題が発生しないようにすることができます。

try…catch…finallyを使った例外処理の記述方法

 例外処理は、try-catch-finally文を使って行われます。

tryブロック内では、可能なエラーを検出し、catchブロック内ではそれを処理します。finallyブロック内では、tryブロックとcatchブロックの後に実行される処理を記述します。

以下は、try-catch-finally文を使ったサンプルです。

try {
    // エラーが発生する可能性のある処理
    let x = y + z;
} catch(error) {
    // エラーが発生した場合の処理
    console.log(error);
} finally {
    // tryブロックとcatchブロックの後に必ず実行される処理
    console.log("finally block executed");
}

上記のサンプルコードでは、tryブロック内で未定義の変数 y, z の値を使用しているため、ReferenceErrorが発生します。そして、catchブロック内でエラーを出力し、finallyブロックでは「finally block executed」と表示されます。

CHECK

catchとfinallyは省略可能です。以下のパターンで指定することができます。

  • try…catch
  • try…finally
  • try…catch…finally

例外を発生させる throw命令の使い方

 throw命令は、プログラマが独自の例外を発生させるために使用します。例外は、Errorオブジェクトのインスタンスまたは、それに準じるオブジェクトを指定します。

throw命令を使用すると、tryブロック内で捕捉できなかった例外をcatchブロック内に渡すことができます。例えば、以下のように独自のエラーを発生させることができます。

try {
    if (x === 0) {
        throw new Error("x cannot be zero");
    }
    let y = 100 / x;
} catch(error) {
    console.log(error.message);
}

また、throw命令は自分自身でカスタムエラーを定義することもできます。

class CustomError extends Error {
    constructor(message) {
        super(message);
        this.name = "CustomError";
    }
}
try {
    throw new CustomError("Something bad happened");
} catch (error) {
    console.log(error.name);
    console.log(error.message);
}

このように、独自の例外クラスを作成し、それをthrow命令で発生させることができるようになります。

throw命令を使用した場合には、必ずcatchブロックで例外を処理するようにしましょう。

Errorオブジェクトについて

 Errorオブジェクトは、例外が発生した際に自動的に生成されます。

 Errorオブジェクトには、エラーメッセージやエラーコードなどの情報が含まれており、これらの情報を利用することで、どのようなエラーが発生したのかを判断することができます。

 Errorオブジェクトには、さまざまな種類があります。たとえば、SyntaxErrorオブジェクトは、JavaScriptの構文にエラーがある場合に生成されます。TypeErrorオブジェクトは、データ型の不一致などのエラーがあった場合に生成されます。また、開発者が独自のErrorオブジェクトを定義することもできます。

以下に、代表的なErrorオブジェクトを表で解説します。

Errorオブジェクト説明
Errorすべてのエラーオブジェクトの基底となるオブジェクト。
SyntaxErrorJavaScriptの構文に誤りがある場合に生成されるオブジェクト。
TypeErrorデータ型の不一致などのエラーがあった場合に生成されるオブジェクト。
RangeError範囲外の数値が使用された場合に生成されるオブジェクト。
ReferenceError定義されていない変数が使用された場合に生成されるオブジェクト。
EvalErroreval() 関数が使用された場合に生成されるオブジェクト。
URIErrorencodeURI() や decodeURI() 関数に誤った引数が渡された場合に生成されるオブジェクト。
InternalErrorJavaScriptの実行エンジンの内部でエラーが発生した場合に生成されるオブジェクト。
代表的なErrorオブジェクト

 これらのErrorオブジェクトは、それぞれ異なる種類のエラーを表しています。たとえば、SyntaxErrorオブジェクトは、JavaScriptの構文エラーを表しており、RangeErrorオブジェクトは、数値の範囲外エラーを表しています。

stackプロパティを使ってエラー発生個所を特定する

 例外が発生すると、そのエラーが発生した個所の情報がErrorオブジェクトに含まれます。その情報を取得するために、Errorオブジェクトのstackプロパティを使用することができます。

 stackプロパティは、エラーが発生した際のコールスタックの情報を文字列として取得することができます。コールスタックとは、JavaScriptの関数の呼び出しの履歴のことであり、現在実行中の関数から遡って、どの関数がどの関数を呼び出したかを示す情報です。

以下は、例外が発生した際のエラー情報を取得する方法の例です。

try {
  // 何らかの処理
} catch (e) {
  console.error(e.stack);
}

 このコードでは、tryブロック内で何らかの処理が行われ、エラーが発生した場合にはcatchブロックが実行されます。catchブロックでは、Errorオブジェクトのstackプロパティをコンソールに出力することで、エラーが発生した個所の情報を確認することができます。

 stackプロパティには、関数名やファイル名、行数などの情報が含まれており、これらの情報を利用することで、エラーが発生した原因を特定することができます。特に、デバッグ時には、stackプロパティを利用することで、エラーが発生した個所を特定し、原因の追跡を行うことができます。

 ただし、stackプロパティは、ブラウザや実行環境によってはサポートされていない場合があります。また、エラーが発生しなかった場合には、stackプロパティは空文字列になるため、注意が必要です。

リスキリングでキャリアアップしてみませんか?

リスキリング(学び直し)は、経済産業省が推奨しており、

今だけ、最大70%のキャッシュバックを受けることができます。

リスキリング 給付金が出るスクール紹介

最大70%の給付金が出るおすすめのプログラミングスクール!

国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!

興味のある方はすぐに確認しましょう。

まとめ

JavaScriptにおける例外処理(エラー処理)の使い方について解説しました。

  • tryブロック内では、可能なエラーを検出する。
  • catchブロック内では、検出したエラーを処理できる。
  • finallyブロック内では、tryブロックとcatchブロックの後に実行される処理を記述する。
  • throw命令は、プログラマが独自の例外を発生させるために使用する。
  • stackプロパティを使ってエラー発生個所を特定することができる。

 例外処理はプログラムの安定性を高めるために欠かせない要素です。try-catch-finally文とthrow命令を使用することで、発生した例外を正確に処理することができ、プログラムの安定性を高めることができます。

例外処理の大切さを再認識できました。以前はtry-catch文を使うことが少なかったのですが、finallyブロックの使い方も知れて良かったです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次