Private Named Parameters решает проблему с приватными именами полей, позволяя инициализировать их через именованные аргументы конструктора класса. Ранее это было невозможно, так как Dart запрещал использовать имена параметров, начинающиеся с _ (нижнего подчеркивания) в публичных конструкторах c именованными аргументами. Но теперь все меняется!😄
Если раньше вам нужно было использовать список инициализации:
class House {
int? _windows;
int? _bedrooms;
int? _swimmingPools;
House({
int? windows,
int? bedrooms,
int? swimmingPools,
}) : _windows = windows,
_bedrooms = bedrooms,
_swimmingPools = swimmingPools;}То теперь код конструктора сокращается до:
class House {
int? _windows;
int? _bedrooms;
int? _swimmingPools;
House({this._windows, this._bedrooms, this._swimmingPools});}А с появлением первичного конструктора такое объявление класса сократится до следующей записи:
class House({
int? _windows,
int? _bedrooms,
int? _swimmingPools,
});🛠 Как это будет работать на уровне компилятора?
Компилятор будет автоматически «удалять» подчеркивание из параметра, но для поля, инициализированного этим параметром, оно останется приватным. Это позволит избежать проблем с конфликтами имен и использовать «чистую» инкапсуляцию, не нарушая синтаксические правила.
Нужна ли нам эта фича?
👍 – О, да, детка!!!
👌 – Сомнительно, но Окей
👎 – Отстой! (кайфую от текущей реализации)

Дискуссия