Kotlinの例外処理と戻り値の関係を理解しよう!初心者にもやさしいやり方を徹底解説
生徒
「Kotlinの例外処理ってエラーを捕まえるやつですよね?それと戻り値って関係あるんですか?」
先生
「そうですね。Kotlinではエラーが起きたときに、戻り値がどうなるかという点も重要なんですよ。」
生徒
「プログラムの結果を返すのが戻り値ですよね?エラーが出たら返されないんですか?」
先生
「いい質問です!Kotlinの例外処理と戻り値の関係について、具体的な例を交えて解説していきましょう。」
1. 例外処理と戻り値とは何かを確認しよう
例外処理とは、プログラムの途中でエラーが発生したときに、そのまま止まらずに「どうにかして処理を続ける」しくみのことです。Kotlinではtryとcatchを使って例外を処理します。
一方、戻り値(もどりち)は、関数が終わったときに「こういう結果になったよ」と返す値のことです。電卓の「=」を押した後の答えのようなイメージです。
Kotlinでは、例外が発生すると、その時点で関数の実行が中断されて、戻り値が返らなくなることがあります。
2. 例外が起きたら戻り値はどうなる?
例えば、「割り算」をする関数を作ってみましょう。ただし、0で割るとエラー(ArithmeticException)になります。
fun divide(a: Int, b: Int): Int {
return a / b
}
この関数を使って次のように呼び出したとします:
val result = divide(10, 0)
println(result)
このとき、bが0なのでエラーが起きて、resultには何も代入されません。そしてプログラムはエラーを表示して止まってしまいます。
Exception in thread "main" java.lang.ArithmeticException: / by zero
つまり、例外が発生した時点で戻り値は返らず、関数は途中で終了するのです。
3. try-catchを使えば戻り値を安全に扱える
戻り値を確実に受け取りたいときは、try-catchで例外をつかまえて、エラーのときだけ別の値を返す方法が使えます。
fun safeDivide(a: Int, b: Int): Int {
return try {
a / b
} catch (e: ArithmeticException) {
0
}
}
このsafeDivide関数は、0で割ってもクラッシュせずに、代わりに0を返してくれます。
val result = safeDivide(10, 0)
println(result) // 0 が表示される
0
このように、catchの中で戻り値を指定することで、エラーがあっても安全に値を返すことができます。
4. 戻り値がnullになるケースとその対策
例外処理では、戻り値にnullを使うこともあります。nullとは「何もない」という意味です。
fun divideOrNull(a: Int, b: Int): Int? {
return try {
a / b
} catch (e: ArithmeticException) {
null
}
}
この場合、失敗したらnullが返るので、呼び出す側ではnullかどうかをチェックする必要があります。
val result = divideOrNull(10, 0)
if (result != null) {
println("割り算の結果: $result")
} else {
println("割り算に失敗しました")
}
割り算に失敗しました
このように、戻り値をnullにすることで、「エラーが起きたこと」を呼び出し側で判断できます。
5. 戻り値と例外の使い分けの考え方
ここまでの例から、次のような考え方ができます:
- 明らかにおかしな使い方(例:0で割る) → 例外を使う
- 失敗する可能性があるけど、そこまで重大ではない →
nullや特別な値を返す
Kotlinでは、「関数の戻り値でエラーを知らせる方法」と、「例外でエラーを知らせる方法」の2つをうまく使い分けるのがポイントです。
6. まとめ:Kotlinの例外処理と戻り値の基本
例外処理と戻り値の関係は、Kotlinのプログラミングにおいて非常に重要です。とくに初心者のうちは、「エラーが出たときに何が返るのか?」を意識するだけでも、バグを防ぎやすくなります。
try-catchでreturnを使えば、関数全体の戻り値として処理できるというのはKotlinらしい特徴でもあります。
実務でもよく使う考え方なので、少しずつ使いながら慣れていきましょう。