Kotlin の nullable 型

nullable 型の宣言

Kotlin では明示的に指定した変数でなければ、null を代入することはできない。null を許容する変数を「nullable」と表現する。これは null-able (null 可能) という意味である。

公式ドキュメントから、コード断片を引用しよう。

このように型名の末尾に ? をつけることで、その変数を nullable にできる。

変数が null かどうかの確認

Kotlin でも Java のように if (variable != null) { ... } として null チェックを行うことができる。しかし、多くの場合は次のような記法を用いることになるだろう。

variable?.something

これは variable が null でないときは variable.something を返し、そうでないときは null を返す。この ?. というオペレータは連続させることもできる。公式ドキュメントには次のような例がある。

bob?.department?.head?.name

これは、bobbob.departmentbob.department.head も null でないときは bob.department.head.name を返す。そうでなければ null を返す。

変数が null でないときに特定の値を返したいときは ?: というオペレータを使う。次のふたつの表現は等価だ。

// b が null でなければ b.length を返し、そうでなければ -1 を返す
val l: Int = if (b != null) b.length else -1

// 同じことを簡潔に表現している
val l = b?.length ?: -1

Kotlin の nut-null assertion

Kotlin には !! というオペレータがある。これを null でない変数に適用すると値が取得できる。null の場合は Null Pointer Exception が投げられる。

このように使う。

// b が null でなければ b.length を返し、そうでなければ Null Pointer Exception が投げられる
val l = b!!.length

Kotlin の安全なキャスト

Kotlin では as? オペレータで型キャスト時の ClassCastException を避けられる。

変数 a をキャストする例をみてみよう。

// a が Int にキャスト可能でなければ null が代入される
val aInt: Int? = a as? Int

null を許容する Collection 型

null を許容する Collection 型は、型変数の末尾に ? をつける。次のスニペットは公式ドキュメントからの引用である。

Java の null チェックを置き換える例

Kotlin Koans に Java の null チェックを Kotlin で置き換える問題がある。具体的には、次の Java コードを Kotlin に置き換える、というお題だ。

お題には制約があり、if は一箇所だけで使いましょうとのことだ。

模範解答はこうだ。

Kotlin なら Java よりだいぶ簡潔に書ける。

広告

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中