В Dart 3.13 наконец-то появилась долгожданная фича — primary constructors. Теперь можно объявить класс с полями и конструктором буквально в одну строку. Звучит просто, правда? Но за этим «сахаром» стоит история долгих споров и компромиссов.
Боб Нюстром (Bob Nystrom) подробно разобрал, через что пришлось пройти команде языка. Давайте выделим самое интересное 🧐
Зачем вообще нужен синтаксический сахар?
Он не добавляет новых возможностей, но оправдан в трех случаях:
🔹 Когда новый способ объективно лучше старого (как отмена обязательного
new
в Dart 2.0).
🔹 Когда он сильно упрощает частые сценарии (как появление настоящих
enum
).
🔹 Когда делает намерение кода более явным.
Главная боль: «Синтаксический клиф»
Представьте: вы написали класс через primary constructor, а потом захотели добавить логику в конструктор. Если синтаксис не позволяет добавить тело, вам придется переписывать всё на старый, многострочный вариант. Это и есть клиф — резкий обрыв удобства.
Чтобы этого избежать, в Dart добавили блоки
this { ... }. Теперь можно расширить primary constructor, не ломая структуру:
class FormatterOptions(
final int indent = 0,
final int pageWidth = 80,
) {
this {
log.write('Created options.');
}
}
И еще одна приятная мелочь: ключевое слово
new
Раньше для именованных конструкторов нужно было повторять имя класса. Если имя длинное — это боль. Теперь можно использовать
new
:
class LongClassName {
new(); // безымянный
new create(); // именованный
}Для фабрик тоже стало короче:
class AnotherLongClass {
factory () { ... }
factory create() { ... }
}Это не просто экономия символов. Это решение проблем с
typedef
и расширениями, где имя класса не всегда доступно.
💡 Итог
Primary constructors — это пример того, как язык может развиваться эволюционно. Команда Dart не просто добавила фичу, а продумала защиту от будущих проблем. Код стал чище, а работа с ним — приятнее.
Полную новость читайте здесь.
FlutterPulse — канал о мире Flutter!
#flutter #dart #FlutterPulse #FlutterPulseNews #hardworkerFlutter #code #dev