Новая фича в Dart: Private Named Parameters

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

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

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

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

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

  • 👍 – О, да, детка!!!
  • 👌 – Сомнительно, но Окей
  • 👎 – Отстой! (кайфую от текущей реализации)

Дискуссия

Dmitriy
_ vs private, больше нравится второе
Pavel Goncharov
Перегрузки методов дождемся когда-нибудь?)
MADTeacher | Станислав Чернышев
Pavel Goncharov
Перегрузки методов дождемся когда-нибудь?)
Есть ощущение, что не дождемся
Maxim Kalistratov
Вот такой синтаксис прям очень нравится
class House({
  int? _windows,
  int? _bedrooms,
  int? _swimmingPools,
});
Zeev Belkin
Более консистентно было бы добавить ключевое слово 'private' для объявления приватных полей без андерскора.
🇷🇺 Максим 🇷🇺 Кириллов 🇷🇺
Pavel Goncharov
Перегрузки методов дождемся когда-нибудь?)
Зачем этот бред городить? Оно не нужно
Pavel Goncharov
🇷🇺 Максим 🇷🇺 Кириллов 🇷🇺
Зачем этот бред городить? Оно не нужно
с чего это?
Присоединиться к обсуждению →

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