null安全と?., ?:, !!演算子の使用

Kotlinはnull安全(null safety)を言語仕様に組み込んでおり、NullPointerException(NPE)の発生を防ぐための強力な仕組みを提供しています。その中でも特に重要な3つの演算子「?.(セーフコール演算子)」、「?:(エルビス演算子)」、「!!(非nullアサーション演算子)」について詳しく説明します。


1. null安全(Null Safety)とは?

Kotlinでは、変数にnullを代入するかどうかを型レベルで制御します。

  • String型 → nullを許容しない

  • String?型 → nullを許容する

例:

kotlin
val a: String = "Hello" // null不可 val b: String? = null // null可

2. ?.(セーフコール演算子)

説明

セーフコール演算子は、オブジェクトがnullでない場合のみメソッドやプロパティにアクセスし、nullであればそのままnullを返します。

使用例

kotlin
val name: String? = null val length = name?.length // null(NullPointerExceptionは発生しない)

解説

Javaなら name.length() でNPEが発生しますが、Kotlinの name?.length は安全にnullを返します。


3. ?:(エルビス演算子)

説明

エルビス演算子は、左辺がnullの場合に右辺のデフォルト値を返す構文です。

使用例

kotlin
val name: String? = null val result = name ?: "No Name" // "No Name"

解説

name がnullなら "No Name" が代わりに使用されます。null値にフォールバック処理を行いたい場合に便利です。


4. !!(非nullアサーション演算子)

説明

この演算子は、nullでないことを保証して変数を扱うために使います。
ただし、nullだった場合はNullPointerExceptionが発生します。

使用例

kotlin
val name: String? = null val length = name!!.length // 実行時エラー(NullPointerException)

解説

!!は強制的にnullでないとして扱うため、安全性が保証できる場面でのみ使うべきです。頻繁な使用はKotlinのnull安全の利点を損ないます。


まとめ

演算子 意味 結果
?. nullなら処理をスキップしてnullを返す a?.length aがnull → null
?: nullなら右辺の値を使う a ?: "default" aがnull → “default”
!! nullでないと主張(nullならNPE) a!!.length aがnull → 例外

これらの演算子を適切に使うことで、Kotlinではより安全で堅牢なプログラムを書くことができます。

生成日:2025/05/04