Kotlinの例外クラスの基本!ExceptionとRuntimeExceptionの違い
先生と生徒の会話形式で理解しよう
生徒
「KotlinでExceptionとかRuntimeExceptionって見かけるんですけど、どう違うんですか?」
先生
「それは例外処理のクラスの種類ですね。エラーの性質や発生タイミングによって使い分けられます。」
生徒
「具体的にどんな場面で違いが出るんですか?」
先生
「では、KotlinにおけるExceptionとRuntimeExceptionの基本を例付きで解説していきましょう。」
1. Kotlinにおける例外クラスとは?
例外クラスは、プログラム実行中に発生するエラーを表すクラスです。Kotlinではすべての例外がThrowableクラスを継承しており、大きく分けてExceptionとErrorがあります。
今回解説するExceptionクラスは、プログラムの中で発生するエラーを扱うための基本クラスです。その中でもRuntimeExceptionは実行時に発生する例外を表します。
2. Exceptionクラスとは?
Exceptionクラスは、チェック例外(checked exception)と呼ばれることがあります。Kotlin自体にはJavaのような強制チェックはありませんが、意図的に例外を扱う必要がある場合に使います。
fun readFile(fileName: String) {
if (fileName.isEmpty()) {
throw Exception("ファイル名が空です")
}
println("ファイルを読み込みます: $fileName")
}
fun main() {
try {
readFile("")
} catch (e: Exception) {
println("エラー: ${e.message}")
}
}
エラー: ファイル名が空です
このようにExceptionは「事前に予測できるエラー」を表すことが多いです。
3. RuntimeExceptionクラスとは?
RuntimeExceptionは実行時例外(unchecked exception)を表します。これはプログラム実行中に予期せず発生するエラーで、事前に防ぎにくいことが多いです。
fun divide(a: Int, b: Int): Int {
if (b == 0) {
throw RuntimeException("0で割ることはできません")
}
return a / b
}
fun main() {
val result = try {
divide(10, 0)
} catch (e: RuntimeException) {
println("実行時エラー: ${e.message}")
-1
}
println("計算結果: $result")
}
実行時エラー: 0で割ることはできません
計算結果: -1
4. ExceptionとRuntimeExceptionの使い分け
- Exception:事前に想定できるエラー(入力チェック、ファイル存在確認など)
- RuntimeException:実行中に発生する予期しないエラー(計算ミス、nullアクセスなど)
KotlinではJavaのように「必ずcatchしなければならない」制約はありませんが、エラーの性質に応じて使い分けることが重要です。
5. 独自の例外クラスを作る
Kotlinでは独自の例外クラスを作成することもできます。用途に応じた名前を付けることで、エラー原因の特定がしやすくなります。
class InvalidUserInputException(message: String) : Exception(message)
fun main() {
try {
throw InvalidUserInputException("入力が不正です")
} catch (e: InvalidUserInputException) {
println("カスタムエラー: ${e.message}")
}
}
カスタムエラー: 入力が不正です
6. 初心者が覚えておきたいポイント
- すべての例外は
Throwableを継承している Exceptionは予測できるエラー、RuntimeExceptionは予測しにくいエラー- Kotlinではcatchは必須ではないが、適切に処理を書くことで安全性が向上
- カスタム例外を作ると可読性と保守性が向上