【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 ?: "値がありません")
あわせて読みたい
【Kotlin】レッスン1-4:Null安全性を理解しよう|安全なコードを書くための基礎知識
【Kotlin】レッスン1-4:Null安全性を理解しよう|安全なコードを書くための基礎知識

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"		// 型推論を利用

型推論については↓↓の記事で詳しく解説しています。

あわせて読みたい
【Kotlin】レッスン1-2:変数と定数を理解しよう
【Kotlin】レッスン1-2:変数と定数を理解しよう

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")
}

練習問題の解答

この問題の正解コードは以下の通りです。

クリックして開いて確認してください。

Q
正解コード
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("ゼロで割ることはできません")
    }
}
Q
サイト改善アンケート & ご指摘/ご質問

本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などを アンケート 形式でお伺いしています。

また記事の内容に関する ご指摘ご質問 もお待ちしています。

1.このサイトをどのように活用していますか?また、今後どのように活用したいですか?
5.気になっているサービス・商品があれば教えてください。
※ 特定の記事に関する内容の場合は、記事番号(レッスン〇-〇)をご記入願います。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました