Private Named Parameters в Dart 3.12

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

dartdart 3.12приватные параметры

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,
});

🛠 Как это будет работать на уровне компилятора?

Компилятор будет автоматически «удалять» подчеркивание из параметра, но для поля, инициализированного этим параметром, оно останется приватным. Это позволит избежать проблем с конфликтами имен и использовать «чистую» инкапсуляцию, не нарушая синтаксические правила.

Нужна ли нам эта фича?

👍 – О, да, детка!!!

👌 – Сомнительно, но Окей

👎 – Отстой! (кайфую от текущей реализации)

Миниатюра поста: текст «Что же Dart такого нам готовит?», логотип Dart и круглая фотография автора на тёмном фоне.
Обложка поста с заголовком и фотографией автора.

Дискуссия

TheLastRay (:
JirafIvanich
На первичном конструкторе freezed сойдёт с ума
сейчас фризд не может его обработать, это правда xD считает, что в классе нет полей но там минимальные правки нужны, по идее
TheLastRay (:
Лучше бы mad рассказал как аугменты потестить а то вроде как пилят, флаг есть, а ни черта не работает
MADTeacher | Станислав Чернышев
TheLastRay (:
Лучше бы mad рассказал как аугменты потестить а то вроде как пилят, флаг есть, а ни черта не работает
Они их до сих пор с флага макросов не перенесли 🫠 И то, пока работают через ж...
TheLastRay (:
MADTeacher | Станислав Чернышев
Они их до сих пор с флага макросов не перенесли 🫠 И то, пока работают через ж...
да даже с флагом макросов не хочет уже
TheLastRay (:
TheLastRay (:
да даже с флагом макросов не хочет уже
доломали xD
MADTeacher | Станислав Чернышев
TheLastRay (:
да даже с флагом макросов не хочет уже
Значит ждем 3.13-dev
JirafIvanich
MADTeacher | Станислав Чернышев
Они их до сих пор с флага макросов не перенесли 🫠 И то, пока работают через ж...
Стас, а есть почитать как делать плагины на андроиде с учётом этого супер кмп и девятой грабли?
MADTeacher | Станислав Чернышев
JirafIvanich
Стас, а есть почитать как делать плагины на андроиде с учётом этого супер кмп и девятой грабли?
С таким не возился, так как для моих задач уже существующих хватало
JirafIvanich
MADTeacher | Станислав Чернышев
С таким не возился, так как для моих задач уже существующих хватало
Штош... Оставлю в основном жабокоде, без красивых подключений в пабспеке
Vorkytaka
Всё что угодно делают, лишь бы не нормальные области видимости.
Присоединиться к обсуждению →

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