(someProperty != null) {
someProperty.foo; // тут опять надо ставить оператор !
}
Дарт же не поддержтвает многопоточность. Почему он не может гарантировать что в этом месте переменная не изменится?
Если переменная может меняться (берется из стейта например) то все равно потребует !
я думал что он работает в одном потоке, а многопоточка достигается за счет изолятов
Ну так и есть. Поэтому вопрос что ему мешает гарантироавть в простых случаях что переменная не изменится. Например нет никаких await. Или что-то еще может прервать волшебным образом выполнение?
за это не в курсе))
потому что это может быть переопределенный геттер, который каждый раз возвращает разное значение.
потому что someProperty это глобальная переменная. Есть вероятность что на момент проверки на null(в if'e) переменная будет не null, а на следующей строке, при обращении к той же переменной, она уже будет null. Поэтому этот трюк с проверкой на null работает только с локальными переменными. Например, можно значение глобальной переменной записать в локальную: final _someProperty = someProperty; if (_someProperty != null) { _someProperty.foo; // будет ок, потому что _someProperty локальная переменная }
нет, дело не в области видимости, а в возможности переопределить свойство класса
https://dart.dev/tools/non-promotion-reasons
Обсуждают сегодня