Новые фичи в Dart 3.9

Я — MADTeacher, автор книг по Dart/Flutter/ИИ в программировании и преподаватель. На канале разбираю свежие фичи языка и фреймворка, объясняю, как и когда их применять, и показываю всё на живых примерах кода. Меньше воды — больше практики: от конструкторов и метапрограммирования до производительности, интеропа и тестирования, а также поднимаю тему использования ИИ для разработки программных продуктов. Если хотите понимать Dart и Flutter в эпоху ИИ глубже — вы по адресу.

dartdart 3.9getter-setter-error

Начиная с Dart 3.9 по умолчанию будет включен экспериментальный флаг getter-setter-error. Он внесет изменение в то, как компилятор Dart обрабатывает ошибки, связанные с геттерами и сеттерами. На данный момент, если тип аргумента сеттера не совпадает с возвращаемым геттером типом данных:

class Person {
  int _age = 0;

  int get age => _age;

  set age(String value){
    var temp = int.tryParse(value);
    if (temp != null){
      _age = temp;
    }
  }
}

Это приводит к ошибке: "The return type of getter 'age' is 'int' which isn't a subtype of the type 'String' of its setter 'age'." С Dart 3.9 такой код больше не будет считаться ошибкой и может быть собран:

main() {
  var person = Person();
  print(person.age); // 0
  person.age = "10";
  print(person.age); // 10
}

Еще одним новшеством будет флаг sound-flow-analysis, который изменит работу анализа потока (flow analysis) с акцентом на sound-null-safety.

До текущего момента компилятор всегда проявлял осторожность, даже если тип переменной не допускал null. То есть, анализатор мог по-прежнему считать, что значение может быть null. Из-за такого поведения следующий код не соберется:

main() {
  var x = 0;
  String y;
  if (x != null) y = 'feature enabled';
  print(y);
  // Error: The non-nullable local variable 'y' 
  // must be assigned before it can be used.
}

Это связано с тем, что анализатор считает, что ветка if не гарантирует исполнение и поэтому выдает ошибку о том, что переменная y возможно не проинициализирована. Dart 3.9 исправляет эту ситуацию и, по своей сути, ставит жирную точку в развитии анализатора Dart: от устаревшей смешанной модели (начиная с Dart 2.12) к строгому sound-null-safety анализу потока (первые шаги были сделаны в Dart 3). Теперь анализ кода будет более точным, что избавит нас от ложных ошибок, а также позволит на уровне компилятора (и подсвечиваемых кусков кода анализатором) убрать мертвые ветки кода во время сборки (разработки) .

Нужны ли нам эти фичи в Dart 3.9?

  • 👍 – О, да, детка!!!
  • 👌 – Сомнительно, но Окей
  • 👎 – Отстой!
Баннер канала MADTeacher: чёрный фон с текстом «Что же Dart такого нам готовит?» и круглый портрет автора Станислава Чернышева справа
Обложка поста канала MADTeacher с вопросом про будущие фичи Dart и фотографией автора.

Дискуссия

TheLastRay (:
Я правильно понимаю, эти флаги включатся только при достижении релизного 3.9.0? Если судить по тому, что в том же пабспеке 3.9.0 не поставить, так как дев версии он считает версиями до 3.9.0
MADTeacher | Станислав Чернышев
TheLastRay (:
Я правильно понимаю, эти флаги включатся только при достижении релизного 3.9.0? Если судить по тому, что в том же пабспеке 3.9.0 не поставить, так как дев версии он считает версиями до 3.9.0
В 3.9-dev уже работают
Присоединиться к обсуждению →

Читайте так же