Kotlinのfinallyブロックの使い方を完全ガイド!初心者でもわかる例外処理の後片付け
生徒
「Kotlinの例外処理ってtryとcatchを使うんですよね?それ以外にも何かあるんですか?」
先生
「はい、もうひとつ大事な構文にfinallyというブロックがあります。」
生徒
「ファイナリー?それは何のために使うんですか?」
先生
「例外が起きても起きなくても、最後に必ず実行したい処理があるときに使います。実際に使い方を見ながら説明しましょう!」
1. Kotlinのfinallyブロックとは?
finallyブロックとは、Kotlinの例外処理で使う構文のひとつで、エラーが発生したかどうかに関係なく、最後に必ず実行される処理をまとめる場所です。
たとえば、開いたファイルを閉じたり、一時的に使ったメモリや変数をリセットしたり、エラーがあっても処理をちゃんと終わらせたいときに使います。
2. try-catch-finallyの基本構文
まずはtry、catch、finallyを使った基本的な構文を見てみましょう。
fun main() {
try {
val result = 10 / 0
println("計算結果: $result")
} catch (e: ArithmeticException) {
println("エラーが発生しました: ${e.message}")
} finally {
println("最後に必ず実行される処理です")
}
}
実行結果:
エラーが発生しました: / by zero
最後に必ず実行される処理です
finallyの部分は、エラーがあっても必ず実行されているのがわかりますね。
3. finallyは何のために使うの?初心者向けに例えで説明
プログラムの中でfinallyがある場面を、日常生活に例えると「片付け」です。
たとえば料理中に「火事が起きた」=エラー(例外)が起きたとしても、「ガスを止める」「換気扇を消す」などの片付けは必要です。finallyはその“必ずやるべき後片付け”の役割です。
このブロックは、エラーが発生しても、処理が正常に終わっても、どちらでも必ず動作します。
4. エラーが起きないときでもfinallyは実行される
今度は、エラーが起きないパターンでもfinallyが実行されるか確認してみましょう。
fun main() {
try {
val result = 10 / 2
println("計算結果: $result")
} catch (e: ArithmeticException) {
println("エラー: ${e.message}")
} finally {
println("処理の最後に実行されるfinallyブロック")
}
}
実行結果:
計算結果: 5
処理の最後に実行されるfinallyブロック
このように、例外(エラー)が発生していなくても、finallyの中は必ず実行されています。
5. finallyでよく使われる実用的な使い方
現実のプログラムでは、finallyブロックは次のようなときによく使われます:
- 開いたファイルやデータベースの接続を閉じる
- 一時的に使ったリソースを解放する
- ログ出力など最後にやるべきことを忘れずに実行する
プログラムの終了処理を明確にし、トラブルを防ぐために非常に役立ちます。
6. returnやthrowがあってもfinallyは実行される
注意点として、tryブロックの中でreturn(戻り値)やthrow(例外を投げる)があっても、finallyはちゃんと実行されます。
次のコードを見てみましょう:
fun sample(): Int {
try {
println("処理中...")
return 100
} finally {
println("return前にfinallyが実行されます")
}
}
fun main() {
val result = sample()
println("結果: $result")
}
実行結果:
処理中...
return前にfinallyが実行されます
結果: 100
このように、returnで関数を抜ける前にも、finallyが先に実行されていることがわかります。
7. Kotlinの例外処理でfinallyを上手に使うコツ
finallyはあくまで“後始末”専用に使いましょう。エラー処理の代わりに使ったり、例外の内容を変更したりするのは避けた方が安全です。
以下のような心がけがポイントです:
- catch:エラー処理
- finally:後片付け(常に実行)
このように役割を分けて使うと、プログラムがきれいで読みやすくなります。