カテゴリ: Kotlin 更新日: 2025/12/15

Kotlinのエラーと例外の基本!初心者がよく出会うエラーとその対処法まとめ

Kotlinのエラーと例外の基本!初心者がよく出会うエラーとその対処法まとめ
Kotlinのエラーと例外の基本!初心者がよく出会うエラーとその対処法まとめ

先生と生徒の会話形式で理解しよう

生徒

「Kotlinでプログラムを書いていると、エラーが出て止まってしまいます。どうすればいいですか?」

先生

「エラーにはいくつか種類があり、それぞれ対処法が異なります。まずは基本的なエラーとその対処法を学びましょう。」

生徒

「具体的にはどんなエラーがあるんですか?」

先生

「それでは、初心者がよく出会うエラーとその対処法を見ていきましょう!」

1. エラーと例外とは?

1. エラーと例外とは?
1. エラーと例外とは?

プログラムを実行しているときに、予期しない問題が発生すると「エラー」や「例外」が起こります。エラーはプログラムの実行を妨げる問題で、例外は特定の状況で発生する問題です。Kotlinでは、例外を適切に処理することで、プログラムの異常終了を防ぐことができます。

2. よくあるエラーとその対処法

2. よくあるエラーとその対処法
2. よくあるエラーとその対処法

初心者がKotlinでよく出会うエラーには、以下のようなものがあります。

  • NullPointerException: null(値がないこと)を扱う際に発生します。対処法としては、nullチェックを行うか、セーフコール演算子(?.)を使用します。
  • NumberFormatException: 文字列を数値に変換しようとしたときに、変換できない文字列だった場合に発生します。対処法としては、変換前に入力値の検証を行います。
  • ArrayIndexOutOfBoundsException: 配列の範囲外のインデックスにアクセスしようとしたときに発生します。対処法としては、配列のサイズを確認し、範囲内でアクセスするようにします。

3. try-catch構文で例外を処理する

3. try-catch構文で例外を処理する
3. try-catch構文で例外を処理する

Kotlinでは、try-catch構文を使って例外を処理します。tryブロック内で例外が発生した場合、catchブロックでその例外を捕捉し、適切な処理を行います。


fun main() {
    val input = "abc"
    try {
        val number = input.toInt()
        println("変換結果: $number")
    } catch (e: NumberFormatException) {
        println("エラー: 数値に変換できません")
    }
}

この例では、文字列"abc"を整数に変換しようとしてNumberFormatExceptionが発生し、catchブロックでエラーメッセージを表示しています。

4. finallyブロックで必ず実行する処理を書く

4. finallyブロックで必ず実行する処理を書く
4. finallyブロックで必ず実行する処理を書く

finallyブロックは、trycatchの後に必ず実行されるコードを記述するために使用します。例えば、ファイルを開いた後に必ず閉じる処理などに使います。


fun main() {
    val input = "123"
    try {
        val number = input.toInt()
        println("変換結果: $number")
    } catch (e: NumberFormatException) {
        println("エラー: 数値に変換できません")
    } finally {
        println("処理が終了しました")
    }
}

この例では、finallyブロック内の"処理が終了しました"が、例外の有無に関わらず必ず実行されます。

5. 例外を自分で投げる(throw)

5. 例外を自分で投げる(throw)
5. 例外を自分で投げる(throw)

必要に応じて、自分で例外を発生させることもできます。これを「例外を投げる(throw)」と言います。


fun divide(a: Int, b: Int): Int {
    if (b == 0) {
        throw IllegalArgumentException("0で割ることはできません")
    }
    return a / b
}

fun main() {
    try {
        val result = divide(10, 0)
        println("結果: $result")
    } catch (e: IllegalArgumentException) {
        println("エラー: ${e.message}")
    }
}

この例では、0で割ろうとした場合にIllegalArgumentExceptionを投げて、catchブロックでその例外を処理しています。

6. 例外処理を使ったユーザー入力の検証

6. 例外処理を使ったユーザー入力の検証
6. 例外処理を使ったユーザー入力の検証

ユーザーからの入力を安全に処理するために、例外処理を活用することができます。以下は、ユーザーに整数の入力を求め、正しい入力が得られるまで繰り返す例です。


fun main() {
    var number: Int? = null
    while (number == null) {
        println("整数を入力してください:")
        val input = readLine()
        try {
            number = input?.toInt()
        } catch (e: NumberFormatException) {
            println("無効な入力です。整数を入力してください。")
        }
    }
    println("入力された整数は: $number です。")
}

このプログラムでは、ユーザーが正しい整数を入力するまで、入力を繰り返し求めます。不正な入力があった場合は、エラーメッセージを表示して再入力を促します。

7. 例外処理の重要性と利点

7. 例外処理の重要性と利点
7. 例外処理の重要性と利点

例外処理を適切に行うことで、以下のような利点があります。

  • プログラムの安定性向上: 予期しないエラーが発生しても、プログラムを安全に継続できます。
  • エラーハンドリングの簡略化: エラーごとに適切な処理を記述できます。
  • デバッグの効率化: エラーの原因を明確にし、修正を迅速に行えます。

これらの利点により、例外処理は安全なプログラムを作る上で欠かせない技術です。

まとめ

まとめ
まとめ

Kotlinで発生するエラーや例外について学んできた内容を振り返ると、プログラムの動作を安定させるためには、例外処理の理解が欠かせないということがよくわかります。特に初心者がつまずきやすい「NullPointerException」や「NumberFormatException」、「ArrayIndexOutOfBoundsException」などは、Kotlinに限らず幅広いプログラミング言語で頻繁に登場する代表的なエラーであり、正しい知識があるかどうかでコードの品質は大きく変わります。エラーの仕組みを理解し、適切に対処することができれば、どんなアプリケーションでも安心して開発を進めていくことができます。

また、例外処理の基本となるtry-catch構文は、エラーが発生する可能性がある処理を安全に包み込むための重要な仕組みです。どのような状況で例外が発生するのか、どの例外クラスを捕捉すべきなのかを理解することで、プログラムの異常終了を防ぎつつユーザーに分かりやすいメッセージを返すことができます。これにより、プログラムの信頼性が大きく向上し、ユーザー体験も改善されます。

finallyブロックのように、例外の有無に関わらず必ず実行したい処理をまとめることができる構文も存在し、ファイル操作やネットワーク処理などの後処理を安全に実行させる場面で特に重要です。リソースを確実に解放するためには、こうした構文を使いこなすことが不可欠です。さらに、必要に応じて自分で例外を投げるthrowの仕組みを使えば、不正な引数や想定外の状態が発生したときに、明確なエラーとしてプログラムの流れを制御することができます。

ユーザー入力の検証に例外処理を組み合わせることで、安全で堅牢な入力チェックを実装できるため、現実のアプリケーション開発でも非常に重宝されます。入力ミスを想定した処理を組み込むことは、システム全体の安全性を高めるために欠かせないポイントです。例外処理は、ただ「エラーを捕まえる」だけのものではなく、ユーザーに寄り添った挙動を提供するための重要な技術でもあります。

以下に、今回学んだ内容を整理したサンプルプログラムを示します。エラーが起きやすい状況を再現しながら、安全に動作させるための例外処理の基本が組み込まれていますので、実際にコードを動かしながら理解を深めると効果的です。

サンプルプログラム:初心者が学ぶ例外処理の基礎


fun safeDivide(a: Int, b: Int): Int {
    if (b == 0) {
        throw IllegalArgumentException("0で割ることはできません")
    }
    return a / b
}

fun main() {
    println("整数を入力してください:")
    val raw = readLine()
    try {
        val number = raw?.toInt()
        println("入力された値:$number")

        val result = safeDivide(number ?: 1, 0)
        println("計算結果:$result")

    } catch (e: NumberFormatException) {
        println("入力が整数ではありません")
    } catch (e: IllegalArgumentException) {
        println("エラー:${e.message}")
    } finally {
        println("プログラムを終了します")
    }
}
先生と生徒の振り返り会話

生徒

「今日のまとめを読んで、エラーや例外がどうして起こるのか少しずつ理解できてきました。特にtry-catchの使い方が分かってきた気がします。」

先生

「その調子です。例外処理は一見難しく感じますが、慣れてくるととても便利な仕組みだと実感できますよ。エラーを適切に扱えると、プログラムの品質はぐっと向上します。」

生徒

「確かに、例外を投げるthrowも役立ちそうです。不正な値が来たときに自分で例外を出せるのは安心ですね。」

先生

「そうなんです。複雑なアプリになるほど、例外処理の重要性は大きくなります。ユーザー入力の検証やファイル操作の後処理など、さまざまな場面で例外処理が役に立ちます。」

生徒

「なるほど…!例外処理を丁寧に書くことで、安心して動くプログラムになるんですね。これからもっと練習して理解を深めます。」

先生

「その意欲があれば大丈夫です。今回の内容はアプリ開発の基礎ですから、しっかり身につければ次のステップへ大きく進むことができますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Kotlinで「エラー」と「例外」の違いは何ですか?

Kotlinにおける「エラー」はプログラムの実行を妨げる重大な問題で、「例外」は特定の条件で発生する実行時の問題です。例外はcatchなどで処理できますが、エラーは基本的に回避が困難です。
関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.3
Java&Spring記事人気No3
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.4
Java&Spring記事人気No4
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.7
Java&Spring記事人気No7
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説