Kotlinの例外処理と戻り値の関係を理解しよう!初心者にもやさしいやり方を徹底解説
生徒
「Kotlinの例外処理ってエラーを捕まえるやつですよね?それと戻り値って関係あるんですか?」
先生
「そうですね。Kotlinではエラーが起きたときに、戻り値がどうなるかという点も重要なんですよ。」
生徒
「プログラムの結果を返すのが戻り値ですよね?エラーが出たら返されないんですか?」
先生
「いい質問です!Kotlinの例外処理と戻り値の関係について、具体的な例を交えて解説していきましょう。」
1. 例外処理と戻り値とは何か?基本をわかりやすく解説
プログラミングを学んでいると必ず出会うのが「例外処理」と「戻り値」という言葉です。まずは、この2つがどのような役割を持っているのか、身近な例でイメージしてみましょう。
例外処理とは:
プログラムの実行中に予想外のトラブル(エラー)が起きたとき、プログラムを強制終了させずに「もしダメだったら、こうしてね」と、予備の動きを指定しておく仕組みのことです。Kotlinでは主にtryとcatchという命令を使います。
戻り値(返り値)とは:
関数という「箱」に処理を頼んだあと、その箱から返ってくる計算結果や答えのことです。自動販売機にお金を入れてボタンを押すと「飲み物」が出てくる、あのイメージがまさに「戻り値」です。
ここで初心者がつまずきやすいポイントが、「エラーが起きたとき、戻り値はどうなるのか?」という点です。実は、特別な対策をしていない場合、Kotlinでは例外が発生した瞬間に処理がストップし、本来返ってくるはずの戻り値はどこにも返らなくなってしまいます。
例えば、次の簡単なプログラムを見てみましょう。
// お店に買い物を頼む関数(戻り値は商品名)
fun buyItem(money: Int): String {
if (money < 100) {
// お金が足りない場合に例外(エラー)を発生させる
throw Exception("お金が足りません!")
}
return "おいしいリンゴ"
}
fun main() {
// 50円しか持たずに買いに行くと...
val result = buyItem(50)
println(result) // ここは実行されず、エラーで止まる
}
このプログラムでは、お金が足りないという「例外」が発生した時点で関数が強制終了するため、変数resultには「リンゴ」も「エラーメッセージ」も入らず、アプリ自体が動かなくなってしまいます。このように、例外と戻り値は「どちらか一方しか受け取れない」という背反した関係にあるのが基本です。
次のセクションからは、この「エラーで止まって戻り値が消えてしまう問題」をどう解決するか、具体的なコードを見ていきましょう。
2. 例外が発生したときの「戻り値」の挙動
プログラムを書いていると、「もしエラーが起きたら、関数が返すべき値(戻り値)はどうなるの?」という疑問を持つかもしれません。結論から言うと、例外が発生した瞬間、戻り値はどこにも返されません。
初心者の方にも分かりやすいよう、具体的な「割り算」の計算プログラムを例に見てみましょう。通常、数値は「0」で割ることはできないため、無理に実行しようとするとArithmeticException(算術例外)というエラーが発生します。
// 2つの数字を割り算する関数
fun divide(a: Int, b: Int): Int {
println("計算を開始します...")
return a / b // ここで0除算が起きると、この行で処理が止まる
}
この関数を、あえてエラーが起きる条件(b = 0)で呼び出してみます。
fun main() {
val result = divide(10, 0) // ここでエラーが発生!
println("計算結果は $result です") // この行は実行されません
}
このコードを実行すると、コンソールには次のようなエラーメッセージが表示され、プログラムが強制終了します。
Exception in thread "main" java.lang.ArithmeticException: / by zero
ここで重要なポイントは、変数 result には何も代入されていないということです。関数が値を戻す(returnする)前に例外が投げられたため、後続の処理である println もスキップされてしまいます。
このように、「例外が起きる」ということは「関数の戻り値を待っている場所に、値ではなく『エラー通知』が飛んでいく」というイメージを持つと、プログラミングの理解がぐっと深まります。この挙動を理解しておくことが、バグの少ない安全なアプリ開発への第一歩となります。
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つをうまく使い分けるのがポイントです。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
6. まとめ:Kotlinの例外処理と戻り値の基本
例外処理と戻り値の関係は、Kotlinのプログラミングにおいて非常に重要です。とくに初心者のうちは、「エラーが出たときに何が返るのか?」を意識するだけでも、バグを防ぎやすくなります。
try-catchでreturnを使えば、関数全体の戻り値として処理できるというのはKotlinらしい特徴でもあります。
実務でもよく使う考え方なので、少しずつ使いながら慣れていきましょう。
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験