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
ブロックは、エラーが発生したかどうかに関わらず、必ず実行されるため、リソースの解放やクリーンアップなどの操作に非常に便利です。プログラムが例外によって途中で停止することを防ぎ、スムーズなエラーハンドリングを実現します。