为什么kotlin提供零安全操作员而不提供例外安全操作员



如果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)
}

我看不出这里有什么缺点。这不是语言的一部分有什么原因吗?

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

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)
}

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

最新更新