Kotlinのfinallyブロックの使い方を完全ガイド!初心者でもわかる例外処理の後片付け
生徒
「Kotlinの例外処理ってtryとcatchを使うんですよね?それ以外にも何かあるんですか?」
先生
「はい、もうひとつ大事な構文にfinallyというブロックがあります。」
生徒
「ファイナリー?それは何のために使うんですか?」
先生
「例外が起きても起きなくても、最後に必ず実行したい処理があるときに使います。実際に使い方を見ながら説明しましょう!」
1. Kotlinのfinallyブロックとは?役割とメリットを解説
finallyブロックとは、Kotlinの例外処理(エラーハンドリング)において、「エラーが起きても、起きなくても、最後に必ず実行する処理」を記述するための専用エリアです。
プログラミングをしていると、データの読み込み中にエラーが発生して処理が止まってしまうことがあります。しかし、エラーで止まったからといって「開きっぱなしのファイル」や「接続したままのデータベース」を放置すると、コンピュータの動作が重くなる原因になります。こうした事態を防ぐための「絶対に行う後片付け」がfinallyの役割です。
try(やってみる)や catch(エラーを捕まえる)の結果に左右されず、最終的に必ずここを通ります。
まずは、イメージを掴むためにごく簡単なプログラムを見てみましょう。ここでは「お片付け」をメッセージとして出力する例を紹介します。
fun main() {
println("--- 処理を開始します ---")
try {
println("1. ファイルを開いて読み込み中...")
// ここでエラーが起きても起きなくても...
} catch (e: Exception) {
println("2. エラーが発生した場合の処理")
} finally {
// エラーの有無にかかわらず、最後に必ずここが動く!
println("3. 【重要】開いたファイルを閉じて後片付け完了!")
}
println("--- すべての工程が終了 ---")
}
このように、finallyを使うことで「処理のやりっぱなし」を防ぎ、安全でクリーンなプログラムを書くことができるようになります。初心者の方は、「エラーに関係なく最後に絶対実行したいことはfinallyに書く」と覚えておきましょう。
2. try-catch-finallyの基本構文と役割
プログラムを実行中に予期せぬエラー(例外)が発生しても、アプリを強制終了させずに適切に処理するための仕組みがtry-catch-finallyです。プログラミング初心者の方でも分かりやすいよう、身近な算数の「0で割る」というエラーを例に、基本構文を解説します。
各ブロックの役割:
- try:エラーが起きそうな処理を書く場所
- catch:エラーが起きた時に「どう対処するか」を書く場所
- finally:成功・失敗に関わらず「最後に必ずやりたいこと」を書く場所
fun main() {
println("処理を開始します。")
try {
// 1. エラーが発生する可能性のある処理(10÷0は数学的にNG)
val result = 10 / 0
println("計算結果: $result") // エラーが起きるとこの行は飛ばされます
} catch (e: ArithmeticException) {
// 2. エラーが発生した時に実行される処理
println("【重要】計算エラー(${e.message})が発生したため、処理を中断して回避しました。")
} finally {
// 3. 成功しても失敗しても必ず実行される処理
println("後片付け:ファイルのクローズやメモリの解放など、最後に必ず実行される処理です。")
}
println("プログラムを安全に終了します。")
}
実行結果:
処理を開始します。
【重要】計算エラー(/ by zero)が発生したため、処理を中断して回避しました。
最後に必ず実行される処理です。
プログラムを安全に終了します。
上記のサンプルでは、10 / 0というエラーが起きた瞬間に、プログラムが止まるのではなくcatchブロックへジャンプしています。そして注目すべきは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が先に実行されていることがわかります。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
7. Kotlinの例外処理でfinallyを上手に使うコツ
finallyはあくまで“後始末”専用に使いましょう。エラー処理の代わりに使ったり、例外の内容を変更したりするのは避けた方が安全です。
以下のような心がけがポイントです:
- catch:エラー処理
- finally:後片付け(常に実行)
このように役割を分けて使うと、プログラムがきれいで読みやすくなります。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験