如果值为 null,则 Koltin 返回 null,否则返回 null

Vla*_*hin 5 kotlin

我使用一些用 Kotlin 编写的业务逻辑。我的方法中有这样的情况 - 我检查一个值是否为 null,如果它为 null - 我想返回 null,否则执行一些逻辑。我的版本看起来像:

fun calculateFoo(parameter: SomeObject?): ReturnObject? = 
    if (parameter == null) null
    else performCalculation(parameter)
Run Code Online (Sandbox Code Playgroud)

字面意思是“如果 value 为 null,则返回自身,否则对其进行处理”。通常,如果 value 不为 null,我们会执行某些操作,例如 elvis 运算符,但这里是“反向”逻辑。对此有更好的解决方案吗?

Arp*_*kla 7

您可以将?.运算符与 结合使用let

fun calculateFoo(parameter: SomeObject?): ReturnObject? = 
    parameter?.let { performCalculation(it) }
Run Code Online (Sandbox Code Playgroud)


Ten*_*r04 7

退一步来说,如果您将其设为具有非空参数的扩展函数,则可以在其调用站点上更自然地使用。

fun SomeObject.calculateFoo(): ReturnObject = 
    performCalculation(this)


val nullable: SomeObject? = ...
val result = nullable?.calculateFoo()
Run Code Online (Sandbox Code Playgroud)

我认为函数最好不要简单地为 null 参数返回 null,因为它掩盖了调用站点的可空性,在调用站点上调用?.就足够了,并使代码清楚地了解可能的 null 返回值。函数的语义按原样允许传递无用的参数以获得无用的结果。

当然,我知道你的例子是人为的,并且在某些情况下有多个参数或者空参数在某些情况下只会导致无用的结果,在这种情况下答案?.let会更合适。

  • 除此之外,如果“performCalculation”是我们自己的函数,我们可以直接将其扩展为“SomeObject”,并摆脱这个“calculateFoo”函数。 (2认同)