Kotlinのthrow文の使い方!例外を明示的に投げる方法
生徒
「Kotlinのthrow文って何ですか?どうやって使うんですか?」
先生
「throw文は、プログラムの中で意図的に例外を発生させるための命令です。」
生徒
「意図的にエラーを起こすってどういうことですか?」
先生
「例えば、入力が間違っているときにエラーを投げて処理を止めることができます。実際の例を見ながら学んでいきましょう。」
1. throw文とは?(意図的にエラーを発生させる理由)
Kotlinのthrow文は、プログラムの中で「ここでおかしいことが起きた!」と明示的に宣言し、あえて例外(エラー)を発生させるための命令です。
「エラーは出ない方がいいのでは?」と思うかもしれませんが、実は逆です。例えば、銀行の引き出し処理で残高が足りないのに処理が進んでしまったら大変ですよね?そういった「プログラム的にあり得ない状況」が発生した際、throwを使って即座に処理を中断させることで、重大なバグやデータの破損を未然に防ぐことができるのです。
料理のレシピ(プログラム)を実行中に「メインの肉が入っていない」という致命的なミスを見つけた時、そのまま作り続けずに「材料不足エラー!」と叫んで作業を止めるのが
throwの役割です。
throwが実行されると、その後の処理は一切行われず、プログラムは「このエラーを解決できる人(catch文など)」を探しにいきます。もし誰も解決してくれない場合は、アプリが停止します。
fun main() {
println("処理を開始します")
// throwを実行した瞬間に、これ以降のコードは無視されます
throw Exception("重大なエラーが発生しました!")
println("この行は実行されません")
}
このように、throwの直後に指定した「例外オブジェクト」が、エラーの原因や詳細を呼び出し元に伝えるメッセージカードのような役割を果たします。
2. throw文の基本構文
throw Exception("エラーメッセージ")
このように、throwの後にExceptionなどの例外オブジェクトを指定します。メッセージは開発者やユーザーに原因を伝えるための文字列です。
3. 基本的な使用例
fun checkAge(age: Int) {
if (age < 0) {
throw IllegalArgumentException("年齢は0以上でなければなりません")
}
println("年齢は $age 歳です")
}
fun main() {
try {
checkAge(-5)
} catch (e: IllegalArgumentException) {
println("エラーが発生: ${e.message}")
}
}
エラーが発生: 年齢は0以上でなければなりません
この例では、年齢が負の値だった場合にIllegalArgumentExceptionをthrowしています。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
4. throw文とカスタム例外
Kotlinでは独自の例外クラスを作ってthrowすることもできます。
class InvalidScoreException(message: String) : Exception(message)
fun checkScore(score: Int) {
if (score !in 0..100) {
throw InvalidScoreException("スコアは0から100の間でなければなりません")
}
println("スコアは $score 点です")
}
fun main() {
try {
checkScore(120)
} catch (e: InvalidScoreException) {
println("カスタム例外: ${e.message}")
}
}
カスタム例外: スコアは0から100の間でなければなりません
5. throwとreturnの違い
returnは関数の処理を終了して呼び出し元に戻りますが、throwは例外を発生させて通常の処理の流れを完全に中断します。throwを実行すると、現在の関数だけでなく、呼び出し元まで影響が及びます。
6. Kotlinでよく使う例外クラス
IllegalArgumentException:引数が不正なときIllegalStateException:オブジェクトの状態が不正なときIOException:入出力エラーが発生したときNullPointerException:nullを不正に参照したとき
これらの例外はKotlin/Javaで広く使われるため、状況に応じて選びましょう。
7. 初心者が覚えておきたいポイント
throw文は意図的に例外を発生させるための命令- 例外は必ず
Exceptionやそのサブクラスのインスタンス throwを使うと処理が途中で終了し、例外が呼び出し元に伝わる- カスタム例外でエラー内容をわかりやすくできる