Kotlinには、nullの値を安全に扱うための仕組みがいくつか用意されています。
その中でも特によく使われるのが エルビス演算子(Elvis Operator) です。
エルビス演算子は次の記号で表されます。
?:
見た目が歌手エルビス・プレスリーの髪型に似ていることから、この名前が付けられました。
この演算子は、「値がnullの場合に代替値を使う」処理を簡潔に書くために使用されます。
エルビス演算子の基本構文
基本的な構文は次の通りです。
val result = value ?: defaultValue
このコードは次のような意味になります。
valueが nullではない場合 →valueが使われるvalueが nullの場合 →defaultValueが使われる
つまり、「左側の値がnullなら右側を使う」という仕組みです。
KotlinにはJavaのような三項演算子 condition ? a : b は存在しませんが、エルビス演算子は nullの場合の代替値を簡潔に書く手段としてよく使われます。
基本的な使用例
nullの場合にデフォルト値を使う
val name: String? = null
val displayName = name ?: "ゲスト"
println(displayName)
出力
ゲスト
処理の流れは次のとおりです。
nameは null- エルビス演算子が評価される
- 右側の
"ゲスト"が使用される
nullでなければそのまま使用する
val name: String? = "Taro"
val displayName = name ?: "ゲスト"
println(displayName)
出力
Taro
この場合、name は nullではないため、その値がそのまま使われます。
if式との違い
エルビス演算子を使わない場合、同じ処理は次のように書けます。
val displayName = if (name != null) {
name
} else {
"ゲスト"
}
これをエルビス演算子で書くと次のようになります。
val displayName = name ?: "ゲスト"
このように、エルビス演算子を使うことでコードを短くシンプルに書くことができます。
セーフコール演算子との組み合わせ
Kotlinでは セーフコール演算子 ?. とエルビス演算子を組み合わせて使うケースが非常に多くあります。
例
val length = text?.length ?: 0
処理の意味は次のとおりです。
textが null の場合
→text?.lengthは null になる- null の場合は
0が返される
つまり、
textが存在する → 文字数を取得textが null → 0を返す
という処理になります。
オブジェクト取得の例
データ取得処理でもよく使われます。
val user = repository.findUser() ?: User("Guest")
意味
findUser()が null の場合
→"Guest"ユーザーを生成- nullでない場合
→ 取得したユーザーを使用
このように、データが取得できなかった場合の代替処理を書くときに便利です。
throwと組み合わせる
エルビス演算子の右側には、値だけでなく 例外のスローを書くこともできます。
val name = inputName ?: throw IllegalArgumentException("名前が必要です")
処理の意味
inputNameが null
→ 例外を投げる- nullでない
→nameに代入される
入力チェックなどでよく使われる書き方です。
returnと組み合わせる
エルビス演算子は 早期リターン(Early Return) にも利用できます。
fun getLength(text: String?): Int {
val value = text ?: return 0
return value.length
}
処理の流れ
textが null
→0を返して処理終了- nullでない
→ 文字数を返す
この書き方を使うことで、ネストの深いif文を減らすことができます。
エルビス演算子の評価順序
エルビス演算子は 左側から評価されます。
val result = a ?: b
処理
aを評価aが null でない →aを返すaが null →bを評価
つまり、右側は必要な場合のみ実行されます。
エルビス演算子のチェーン
複数の候補を順番に評価することも可能です。
val name = nickname ?: username ?: "Guest"
処理
nicknameを確認- nullなら
username - それも nullなら
"Guest"
最初に見つかった nullでない値 が採用されます。
KotlinのNull安全演算子まとめ
Kotlinにはnull安全のための代表的な演算子があります。
| 演算子 | 役割 |
|---|---|
?. | セーフコール |
?: | エルビス演算子 |
!! | 強制的にnullでないとみなす |
例
val length = text?.length ?: 0
このコードはKotlinで非常によく見られるパターンです。
まとめ
エルビス演算子は、Kotlinでnullを扱う際の重要な構文です。
基本形
value ?: defaultValue
意味
- 左側がnullでなければその値を使う
- nullなら右側の値や処理を使う
主な用途
- デフォルト値の設定
- 例外のスロー
- 早期return
- null安全コードの簡潔化
Kotlinでは ?. と ?: を組み合わせる書き方が非常に多いため、この演算子を理解しておくと Kotlinコードの可読性と理解力が大きく向上します。
以上、Kotlinのエルビス演算子についてでした。
最後までお読みいただき、ありがとうございました。










