【Kotlin】レッスン2-8:エラーメッセージを理解しよう|エラーの原因と対処法

一つ前のページでは繰り返しの制御について学習しました。
今回は エラーメッセージ について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
・Lesson2-1:比較演算子と論理演算子を理解しよう
・Lesson2-2:if文による分岐処理を理解しよう
・Lesson2-3:when文による分岐処理を理解しよう
・Lesson2-4:スマートキャストを理解しよう
・Lesson2-5:for文による繰り返し処理を理解しよう
・Lesson2-6:while文による繰り返し処理を理解しよう
・Lesson2-7:繰り返しを制御しよう
・Lesson2-8:エラーメッセージを読めるようになろう ◁今回はココ
・Lesson2-9:例外処理を理解しよう
・確認問題2-☆1:ハイアンドローゲームを作ろう
・確認問題2-☆2:数字当てゲームを作ろう
・確認問題2-☆3:簡単なじゃんけんゲームを作ろう
Lesson3:関数編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
エラーメッセージとは?|エラーの意味と読み方
エラーが発生したとき、エラーメッセージは初心者にとっても経験者にとっても重要な手がかりになります。
Kotlinのエラーメッセージは非常に分かりやすく設計されており、問題の特定と解決が簡単になる工夫がされています。
この記事ではエラーメッセージとは何か、よくあるエラーの例、そしてそれらを回避する方法について学びます。

エラーメッセージとは?|エラーの意味と役割
エラーメッセージとは、プログラム実行時やコンパイル時に、プログラムに誤りがある場合に表示される「警告」や「お知らせ」のことです。
エラーの種類や発生した箇所を知らせる役割があり、プログラムを修正する際のヒントになります。
Kotlinのエラーメッセージ簡潔かつ具体的なため、エラーを追跡しやすい特徴があります。
よく見るエラー例と安全な回避方法
初心者がよく遭遇しやすいエラーメッセージをいくつか紹介します。
NullPointerException例外|ヌルポインタ例外
Null安全性が確保されていない場合に発生します。
「null」とは値が何も入っていない特別な状態です。そのnullに対して「何かしよう」とすると、「できません!」とエラーになります。
val message: String? = null println(message.length) // NullPointerException
回避方法:KotlinのNull安全性を活用することで防止できます。セーフコール演算子?.
や エルビス演算子?:
を利用しましょう。
val message: String? = null println(message?.length ?: "値がありません")

Type Mismatch Error|型不一致エラー
Type Mismatch Error(型不一致エラー)は、「期待される型」と「実際の型」が合わないときに出るコンパイルエラーです。
変数や関数の型に「合わない値」を代入しようとした場合に発生します。
val number: Int = "abc" // Type Mismatch Error val text: String = 123 // Type Mismatch Error
回避方法:変数の型を正確に指定するか、型推論を正しく活用しましょう。
val number: Int = 123 // 型を正確に合わせる val text = "abc" // 型推論を利用
型推論については↓↓の記事で詳しく解説しています。

Unresolved Referenceエラー|未解決の参照
Unresolved Reference(未解決の参照)は、プログラム内で使っている名前(変数・関数・クラスなど)が見つからない時に出ます。
宣言されていない変数やインポートされていないライブラリを参照した場合などに発生します。
val text = "Kotlin" println(test) // 誤字によるUnresolved Referenceエラー
回避方法:変数や関数を正しく宣言し、必要なライブラリをインポートしましょう。
- その名前が正しく宣言されているか確認する
- スペルが間違っていないか確認する
- 必要なインポートがあるか確認する
val text = "Kotlin" println(text)
Division by Zero Exception|ゼロによる除算例外
Division by Zero Exception(ゼロによる除算例外)は、数値を0で割ろうとした時に発生するエラーです。
val result = 10 / 0 // ArithmeticException
回避方法:割り算を行う前に分母がゼロでないことを確認しましょう。
val divisor = 0 if (divisor != 0) { val result = 10 / divisor } else { println("ゼロで割ることはできません") }
もしくは次のレッスンで紹介する 例外処理 を活用する方法もあります。
IndexOutOfBoundsException|インデックス外例外
IndexOutOfBoundsException(インデックス・アウト・オブ・バウンズ例外)は、
文字列や配列などで「存在しないインデックス」を指定した時に発生するエラーです。
val text = "Kotlin" println(list[10]) // IndexOutOfBoundsException
回避方法:リストや配列にアクセスする前に、サイズを確認する条件を追加しましょう。
val text = "Kotlin" if (text.size > 10) { println(text[10]) } else { println("指定されたインデックスは存在しません") }
NumberFormatException|ナンバーフォーマット例外
NumberFormatException(ナンバーフォーマット例外)は、数値として解釈できない文字列をIntやDoubleなどに変換しようとした時に発生するエラーです。
val number = "abc".toInt() // NumberFormatException
回避方法:toIntOrNull
を使用して、変換できない場合の処理を追加しましょう。
val input = "abc" val number = input.toIntOrNull() ?: 0 println(number)
まとめ|エラーを味方につけよう!
Kotlinでよく出会うエラーは、一見難しそうに見えますが、仕組みや原因を知っておくだけで対処がとても楽になります。
エラーメッセージをしっかり読み、冷静に原因を突き止めていけば、必ず成長につながります。
失敗を恐れず、エラーと仲良くなりながら、コーディングを楽しんでいきましょう!
練習問題|エラーメッセージを読んで問題を解決しよう

以下のコードをコピーして実行してください。そうすると複数のエラーが発生するので、表示されるメッセージを参考にエラーを修正してください。
fun main() { val message: String? = null println("Message length is: ${message.length}") val number: Int = "123" println("Number is: $number") println(undeclaredVariable) val divisor = 0 val result = 10 / divisor println("Result is: $result") }
練習問題の解答
この問題の正解コードは以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
fun main() { // NullPointerExceptionを防ぐ val message: String? = null // セーフコール演算子を使用 println("Message length is: ${message?.length ?: "値がnullです"}") // Type Mismatch Errorを防ぐ // 正しい型を使用する val number: Int = 123 println("Number is: $number") // Unresolved Referenceを防ぐ // 変数を事前に宣言する val declaredVariable = "This is a declared variable" println(declaredVariable) // Division by Zero Exceptionを防ぐ val divisor = 0 if (divisor != 0) { val result = 10 / divisor println("Result is: $result") } else { println("ゼロで割ることはできません") } }
- サイト改善アンケート & ご指摘/ご質問
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などを アンケート 形式でお伺いしています。また記事の内容に関する ご指摘 や ご質問 もお待ちしています。