Kotlinのエルビス演算子について

採用はこちら

Kotlinには、nullの値を安全に扱うための仕組みがいくつか用意されています。

その中でも特によく使われるのが エルビス演算子(Elvis Operator) です。

エルビス演算子は次の記号で表されます。

?:

見た目が歌手エルビス・プレスリーの髪型に似ていることから、この名前が付けられました。

この演算子は、「値がnullの場合に代替値を使う」処理を簡潔に書くために使用されます。

目次

エルビス演算子の基本構文

基本的な構文は次の通りです。

val result = value ?: defaultValue

このコードは次のような意味になります。

  • valuenullではない場合value が使われる
  • valuenullの場合defaultValue が使われる

つまり、「左側の値がnullなら右側を使う」という仕組みです。

KotlinにはJavaのような三項演算子 condition ? a : b は存在しませんが、エルビス演算子は nullの場合の代替値を簡潔に書く手段としてよく使われます。

基本的な使用例

nullの場合にデフォルト値を使う

val name: String? = null

val displayName = name ?: "ゲスト"

println(displayName)

出力

ゲスト

処理の流れは次のとおりです。

  1. name は null
  2. エルビス演算子が評価される
  3. 右側の "ゲスト" が使用される

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

処理の意味は次のとおりです。

  1. text が null の場合
    text?.length は null になる
  2. 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
}

処理の流れ

  1. text が null
    0 を返して処理終了
  2. nullでない
    → 文字数を返す

この書き方を使うことで、ネストの深いif文を減らすことができます。

エルビス演算子の評価順序

エルビス演算子は 左側から評価されます

val result = a ?: b

処理

  1. a を評価
  2. a が null でない → a を返す
  3. a が null → b を評価

つまり、右側は必要な場合のみ実行されます

エルビス演算子のチェーン

複数の候補を順番に評価することも可能です。

val name = nickname ?: username ?: "Guest"

処理

  1. nickname を確認
  2. nullなら username
  3. それも 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のエルビス演算子についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次