首页 > 解决方案 > 使用默认参数不向函数传递值

问题描述

我有这个 Kotlin 功能:

fun doSomething(user: User = defaultUser) {
  //do something
}

我从另一个地方调用它:

val user: User? = getUser()
if (user == null) {
  doSomething()
} else {
  doSomething(user)
}

是否可以改进此代码?我认为这个“if/else”有点混乱。有可能做这样的事情吗?

doSomething(user ?: NoValue)

标签: kotlindefault-value

解决方案


您可以将其缩减为user?.run(::doSomething) ?: doSomething()(如果doSomething不返回 null),但我不知道您为什么要这样做!

老实说,if/else 对我来说读起来很好,把它放在没有大括号的一行上,它又好又紧凑。不幸的是,我认为您不能有条件地将参数添加到函数调用中(当您有几个参数时,处理默认参数可能会变得笨拙)。

我同意@benjiii,如果您不需要使用 null 作为合法值,最好有一个可为空的参数并在内部处理默认值


推荐阅读