【JavaScript】例外処理(try-catch-finally) - 予期せぬエラーの対応処理

【JavaScript】例外処理(try-catch-finally) - 予期せぬエラーの対応処理

JavaScriptの例外処理をご紹介します。

例外

例外はプログラム実行時の予期せぬエラーのことです。

例外処理

例外処理は例外が発生した場合に、プログラムで復帰する処理を行うことです。
※ 致命的な(プログラムで復帰できない)エラーは対応できません。

JavaScriptではtry-catch-finallyを使うことで例外処理を実現します。

基本構文

try {
    // 処理........
} catch ( 変数 ) {
    // 例外処理........
} finally {
    // 処理........
}

例外処理はtryブロック、catchブロック、finallyブロックの3つのブロックから構成します。
※ finallyブロックは必須ではありません。

try

tryブロックは処理を記述します。
このブロックで例外が発生した場合、以降の処理を中断し、catchブロックに移行します。

catch

catchブロックは例外処理を記述します。
tryブロックで発生した例外はオブジェクトとしてcatch ( 変数 )の変数に代入されます。

finally

finallyブロックの処理は例外の発生に関わらずtryブロックまたはcatchブロックの終了後に実行されます。
このブロックは必須ではありません。

サンプル

先ずは例外を発生するコードを確認しましょう。

let result = 0;

result = x + y;

console.log(result);
Uncaught ReferenceError: x is not defined

このコードは宣言されていない変数xyを使用したことにより例外を発生します。
例外によりプログラムが中断されるため、console.log(result);は実行されません。

例外から復帰するように例外処理を適用すると次のようなコードになります。

let result = 0;

try {
    result = x + y;
} catch( e ) {
    console.log(e);
}

console.log(result);
ReferenceError: x is not defined
0

変数eは例外がオブジェクトとして記憶されます。
出力するとエラーの内容が表示されました。

また、コンソールの0console.log(result);の出力によるものです。
このように例外処理を施すことで、エラーが発生してもプログラムを終了せずに復帰することができます。

さらにfinallyブロックを追加します。

let state = "START";

console.log(state);

let result = 0;

try {
    result = x + y;
} catch( e ) {
    console.log(e);
} finally {
    state = "FINISH";
}

console.log(result);

console.log(state);
START
ReferenceError: x is not defined
0
FINISH

finallyブロックで変数stateの値を更新する処理を記述しています。
コンソール出力からcatchブロックの終了後、tryブロックが実行されたことが分かります。

例外が発生しないパターンも確認しましょう。

let state = "START";

console.log(state);

let result = 0;
let x = 1, y = 2;

try {
    result = x + y;
} catch( e ) {
    console.log(e);
} finally {
    state = "FINISH";
}

console.log(result);

console.log(state);
START
3
FINISH

例外は発生しませんが、コンソール出力からfinallyブロックが実行されたことが分かります。