如何重写这个“检查、分配和返回”模式?

Sie*_*yer 1 kotlin

有没有更清晰、更惯用的方式来重写这个“检查、分配和返回”函数?

fun getX(): Y {
    if (X == null) {
        X = ...
    }

    return X!!
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道 Elvis 运算符,但问题是,尽管我可以使用语法糖节省几行

fun getX(): Y {
    X = X ?: ...
    return X!!
}
Run Code Online (Sandbox Code Playgroud)

我不会更改代码的语义。无论如何我都需要强制转换(!!)。所以是一样的,只是短了三行。

编辑X是某个对象的属性,我需要更新它。

Ily*_*lya 5

您可以使用以下函数将赋值移至 elvis 运算符的右侧also

fun getX() = x ?: valueIfXisNull.also { x = it }
Run Code Online (Sandbox Code Playgroud)