概要
KotlinのElvis演算子ではUnit
型はどのように扱われるでしょうか?
この記事では具体的な挙動について説明します。
Unitとは
KotlinではUnit
は値を返さない関数の戻り値として使用されます。Kotlinの型システムではUnit
は非nullなので、null
として扱われることはありません。
Elvis演算子の動作
Elvis演算子(?:
)は、左辺の値がnull
の場合に右辺の値を返します。しかし、Unit
は常に非nullなため、Elvis演算子の左辺にUnit
を返す関数を指定しても右辺の値は評価されません。
具体例
以下のコードの場合、
fun printMessage() {
("Hello, World!")
println}
fun main() {
val result = printMessage() ?: "Default Message"
(result)
println}
printMessage()
関数は常にUnit
を返します。Elvis演算子の左辺はUnit
(非null)であるため右辺の"Default Message"
は評価されず、result
にはUnit
が代入されます。その結果、println(result)
はkotlin.Unit
と出力されます。
まとめ
Unit
はKotlinの型システム上、常に非null- Elvis演算子は左辺が
null
のときにのみ右辺を評価する Unit
をElvis演算子の左辺に置くと、右辺の評価は行われない
ちょっとあやふやなままElvis演算子を使っていたこともありましたが、Unit
は値であると考えればすっきり理解できます。