Kotlinはnull安全(null safety)を言語仕様に組み込んでおり、NullPointerException(NPE)の発生を防ぐための強力な仕組みを提供しています。その中でも特に重要な3つの演算子「?.(セーフコール演算子)」、「?:(エルビス演算子)」、「!!(非nullアサーション演算子)」について詳しく説明します。
1. null安全(Null Safety)とは?
Kotlinでは、変数にnullを代入するかどうかを型レベルで制御します。
-
String型 → nullを許容しない -
String?型 → nullを許容する
例:
2. ?.(セーフコール演算子)
?.(セーフコール演算子)
説明
セーフコール演算子は、オブジェクトがnullでない場合のみメソッドやプロパティにアクセスし、nullであればそのままnullを返します。
使用例
解説
Javaなら name.length() でNPEが発生しますが、Kotlinの name?.length は安全にnullを返します。
3. ?:(エルビス演算子)
?:(エルビス演算子)
説明
エルビス演算子は、左辺がnullの場合に右辺のデフォルト値を返す構文です。
使用例
解説
name がnullなら "No Name" が代わりに使用されます。null値にフォールバック処理を行いたい場合に便利です。
4. !!(非nullアサーション演算子)
!!(非nullアサーション演算子)
説明
この演算子は、nullでないことを保証して変数を扱うために使います。
ただし、nullだった場合は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