0

如果 kotlin 提倡安全代码,例如:

val currentName = "Some Guy"
getDataFromServer()?.getUsers()?.find { it.name == currentName }?.profilePicture?.let {
  showPicture(it)
} ?: let {
  showAddPictureButton()
}

为什么没有类似的异常处理语法,例如使用虚??.运算符:

val someUserId = 123
val newName = "Cool Dude"
connectToDatabase()??.getDao<UserDao>()??.changeUserName(someUserId, newName)??.let { newUserData ->
  reloadView(newUserData)
} ??: let { error ->
  interpretAndHandleError(error)
}

我没有看到这里的缺点。有什么理由这不是语言的一部分吗?

4

1 回答 1

4

这不是关于缺点,而是关于没有足够的好处。考虑写你的第一个例子没有?.

val data = getDataFromServer()
if (data != null) {
    val users = data.getUsers()
    if (users != null) {
        val user = users.find { it.name == currentName }
        if (user != null) ...
    } else null
} else null

您可以看到它比原始代码复杂得多。现在考虑在没有它的情况下编写您的建议??.

try {
    connectToDatabase().getDao<UserDao>().changeUserName(someUserId, newName).let { newUserData ->
        reloadView(newUserData)
    }
} catch(error: Exception) { 
    interpretAndHandleError(error)
}

您要消除的复杂性在哪里?

于 2020-03-09T21:02:02.170 回答