kotlin обратное логическое безопасное литье

Допустим, у меня есть объект Response. Теперь я хотел бы проверить булеву переменную success в поле Response и сделать ранний возврат, если ответ не успешен.

if(response == null || !response.success){
   return;
} //Java version

Теперь я хотел бы использовать нулевую проверку безопасности Kotlin следующим образом

if(response?.success ?: true){
    return
}

Если я не ошибаюсь, если ответ или успех равен нулю, мы вернем true в условии if. Однако, если response.success не имеет значение null и равно true, мы все равно вернемся из функции, а это не то, что мне нужно. Как мне исправить это состояние?

2 ответа

Решение

Я думаю, что вы должны сделать

if(!(response?.success ?: false)){
    return // null or failed
}

что эквивалентно вашей версии Java.

но обратите внимание: если null проверить версию легче читать. Вы можете использовать это в Kotlin тоже

Вы также можете перевернуть условие

response?.success?.let {
  // do something when success
}

см. документ оператора Elvis для получения дополнительной информации

Довольно старый вопрос, но я просто наткнулся на него. Следующее может быть самым коротким предложением if:

      if (response?.success != true) {
   //There is either no response, or it was not successful
}
Другие вопросы по тегам