Разница между x?.let{ }
и if (x != null) { }
в Котлине заключается в том, что первая способствует тому, что x
не обнуляется. Поскольку у Kotlin есть типы, не допускающие значения NULL, вам не нужно писать x!!
, чтобы утверждать, что NULL не может быть обнулен внутри блока.
Дарт не имеет необнуляемых типов (пока), так что различие в Дартсе не важно.
Просто используйте if (x != null) { ... }
.
Если Dart получает ненулевые типы, вы можете быть уверены, что проверка null
в условии также повысит x
до ненулевого значения внутри блока (если x
- локальная переменная, не мутируется внутри блока , могут применяться другие ограничения).
Судя по вашим другим комментариям, вы, возможно, захотите использовать поведение Котлина x?.run { ... }
, которое связывает this
с x
внутри блока лямбды. В Dart нет соответствующей функции. Вы не можете переопределить this
, он всегда привязан к объекту, к которому был вызван текущий метод, даже внутри вложенных замыканий, которые фиксируют значение this
так же, как они захватывают другие переменные.