2025年2月1日土曜日

KotlinのElvis演算子でUnitはどう評価される?

概要

KotlinのElvis演算子ではUnit型はどのように扱われるでしょうか? この記事では具体的な挙動について説明します。

Unitとは

KotlinではUnitは値を返さない関数の戻り値として使用されます。Kotlinの型システムではUnitは非nullなので、nullとして扱われることはありません。

Elvis演算子の動作

Elvis演算子(?:)は、左辺の値がnullの場合に右辺の値を返します。しかし、Unitは常に非nullなため、Elvis演算子の左辺にUnitを返す関数を指定しても右辺の値は評価されません。

具体例

以下のコードの場合、

fun printMessage() {
    println("Hello, World!")
}

fun main() {
    val result = printMessage() ?: "Default Message"
    println(result)
}

printMessage()関数は常にUnitを返します。Elvis演算子の左辺はUnit(非null)であるため右辺の"Default Message"は評価されず、resultにはUnitが代入されます。その結果、println(result)kotlin.Unitと出力されます。

まとめ

  • UnitはKotlinの型システム上、常に非null
  • Elvis演算子は左辺がnullのときにのみ右辺を評価する
  • UnitをElvis演算子の左辺に置くと、右辺の評価は行われない

ちょっとあやふやなままElvis演算子を使っていたこともありましたが、Unitは値であると考えればすっきり理解できます。