概要
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は値であると考えればすっきり理解できます。