SwiftのdeferとJavaのfinally
Swift defer
・現在のスコープ(関数・メソッド・ブロック)を抜ける直前に必ず実行される。
・正常終了でも、return でも、エラー throw でも必ず実行される。
・追加した順ではなく 後入れ先出し(LIFO) で実行。
func example() {
defer { print("A") }
defer { print("B") }
print("Work")
}
Work B A
Java finally
・try / catch の終了後、必ず実行されるブロック。
・例外が発生しても、return しても実行される。
・try-catch-finally の文脈の中でのみ使用可能。
try {
System.out.println("Work");
} finally {
System.out.println("Cleanup");
}
比較
|
特徴 |
Swift defer |
Java finally |
|---|---|---|
|
実行タイミング |
スコープ終了時 |
try/catch が終わった後 |
|
使用場所 |
どこでも使える |
try/catch の内部 |
|
実行順 |
後入れ先出し (LIFO) |
定義順に実行 |
|
主な用途 |
クリーンアップ、早期 return 対応 |
クリーンアップ(古典的手法) |
|
仕組み |
コンパイラによるスコープ管理 |
構文的ブロックに基づく制御 |





