finallyとは?
try...catch構文では、通常、例外が発生した場合にcatchブロックでエラーを処理します。しかし、エラーが発生しても、またはエラーが発生しなくても、常に実行されるコードが必要な場合があります。finallyブロックは、そのような状況で利用されます。finallyブロックは、例外が発生するかどうかにかかわらず、必ず実行される部分です。
try…catch…finallyの構文
以下は、try...catch...finally構文の基本的な形です。
try {
// エラーが発生する可能性のあるコード
} catch (error) {
// エラーが発生した場合に実行されるコード
} finally {
// エラーが発生してもしなくても必ず実行されるコード
}
finallyブロックの役割
finallyブロックは、次のような状況で役立ちます。
- 外部リソースを使用した後に必ずクリーンアップが必要な場合(例: ファイルやデータベース接続の閉鎖)。
- エラー処理が終わった後に、UIの状態を更新したり、処理を完了する必要がある場合。
プログラムの解説
次に、finallyを使った例を示します。
try {
throw new Error("何かが間違っています"); // 意図的にエラーを発生
} catch (error) {
console.error("エラーが発生しました: " + error.message); // エラーをキャッチ
} finally {
console.log("必ず実行される処理"); // 例外の有無に関わらず実行
}
この例では、tryブロック内で意図的にエラーを発生させ、catchブロックでエラーをキャッチしています。エラーの有無に関わらず、finallyブロック内の処理は必ず実行されます。
finallyブロックの実行タイミング
finallyブロックは、エラーが発生した場合も発生しなかった場合も実行されますが、その実行タイミングはtryおよびcatchブロックの後です。以下の表で実行の流れを確認できます。
| 状況 | tryブロック | catchブロック | finallyブロック |
|---|---|---|---|
| エラーなし | 実行される | スキップされる | 実行される |
| エラーあり | 実行される | 実行される | 実行される |
finallyを使用するシーン
実際のアプリケーションでfinallyを使用するシーンには、以下のようなものがあります。
- API呼び出し後にローディングインジケーターを非表示にする処理。
- データベース接続を終了する処理。
- 一時ファイルを削除するクリーンアップ処理。
まとめ
try...catch...finally構文を使用すると、例外が発生した場合でも確実に実行しなければならない処理をfinallyブロックに書くことができます。finallyブロックは、エラーが発生したかどうかに関わらず、必ず実行されるため、リソースの解放やクリーンアップなどの操作に非常に便利です。プログラムが例外によって途中で停止することを防ぎ、スムーズなエラーハンドリングを実現します。