Дело не в недостатках, а в отсутствии достаточных преимуществ. Попробуйте написать свой первый пример без ?.
:
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)
}
Где сложность, которую вы хотите устранить?