【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
このコードは宣言されていない変数x
、y
を使用したことにより例外を発生します。
例外によりプログラムが中断されるため、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
は例外がオブジェクトとして記憶されます。
出力するとエラーの内容が表示されました。
また、コンソールの0
はconsole.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ブロックが実行されたことが分かります。