Nullの扱いに関する機能

Kotlinはnullの安全性を重視した言語であり、Nullの扱いに関する機能を備えています。 今回はこれらの機能をサンプルプログラムを交えて勉強してみます。

※この記事は2023/11/3時点の情報です。

Null安全演算子「?」
このコードでは、Null安全演算子「?」を使ってNullableな変数がnullの場合に安全にアクセスしています。 Null安全演算子「?」をつけることで、Javaでお馴染みのNullPointerExceptionが発生せず、安全にアクセスできます。

fun main(args: Array<String>) {
    var nullableString: String? = "Hello"
    // nullableStringがnullでない場合に長さを取得する
    val length: Int? = nullableString?.length
    println("レングス: $length")

    nullableString = null
    // nullableStringがnullの場合に安全にアクセスする
    val lengthAfterNull: Int? = nullableString?.length
    println("NullPointerExceptionにならないので安全です: $lengthAfterNull")
}

処理結果は次の通りです。

レングス: 5
NullPointerExceptionにならないので安全です: null

エルビス演算子「?:」
このコードでは、エルビス演算子「?:」を使用しています。 nullableString?.length ?: -1は、nullableStringがnullの場合は-1を返し、nullでない場合は文字列の長さを返します。

fun main(args: Array<String>) {
    var nullableString: String? = null
    // nullableStringがnullの場合に代替の値を設定する
    val length = nullableString?.length ?: -1
    println("変数「nullableString」の値: $length")
}

処理結果は次の通りです。

変数「nullableString」の値: -1

Not-nullアサーション演算子「!!」
「!!」演算子は、Nullableな変数がnullでないことを強制的に前提とします。 あくまで前提とするだけなので実際に変数がnullだった場合はNullPointerExceptionが発生するので注意が必要です。 このコードでは、「!!」演算子を用いて意図的にNullPointerExceptionを発生させ、try-catchブロックでエラーをキャッチしています。

fun main(args: Array<String>) {
    var nullableString: String? = null

    try {
        println("処理開始")
        // nullableStringがnullであることを知っているが、強制的に非nullとして扱うため、エラーが発生する
        val length = nullableString!!.length
        println("エラーになるのでここは通過しません")
    } catch (e: NullPointerException) {
        println("エラー(NullPointerException): ${e.message}")
    }
}

処理結果は次の通りです。

処理開始
エラー(NullPointerException): null

これらのサンプルは、KotlinでNullを扱うための基本的な演算子を示しています。 ただし、「!!」演​​算子は慎重に使用することをお勧めします。 コードの安定性を確保するために安全な方法でNullを扱う、Null安全演算子「?」やエルビス演算子「?:」を積極的に利用することが重要です。
ここまでの内容は理解できましたか?

Kotlinのラムダ式と型推論を覚えられましたか?

あまり理解できなかった人は自分でサンプルを書いてみてください。 知っておいて損は無いので頑張って勉強しましょうね!

管理人情報