Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpTpEt 21 of 224 menu
◀ ▶

Тип extension type в Dart

Иногда одно и то же представление нужно помечать разными именами на этапе компиляции, но не создавать отдельный объект в памяти. В Dart 3 для этого служит конструкция extension type: она оборачивает уже существующий тип-представление.

Запись начинается с имени, ключевых слов extension type и типа представления в скобках. В теле можно добавить методы и геттеры, которые работают с этим представлением:

extension type PostId(int id) { int get value => id; } void main() { var raw = 7; PostId pid = PostId(raw); print(pid.value); }

Переменная raw хранит обычное число, а PostId(raw) создает статическую обертку с тем же представлением. Геттер value возвращает исходное число из параметра id:

extension type PostId(int id) { int get value => id; } void report(PostId post) { print('post ${post.value}'); } void main() { report(PostId(3)); }

Extension type не является классом: при выполнении программы обертка стирается, и остается только представление. Проверки на этапе компиляции при этом различают PostId и голый int, поэтому случайно передать просто число туда, где ждут идентификатор поста, сложнее:

Объявите extension type Employee с представлением int и геттером value, который возвращает это число. Создайте значение из 5 и выведите value.

Дан следующий код:

extension type Employee(int id) { int get value => id; } void showId(Employee person) { print(person.value); } void main() { var raw = 9; }

Оберните raw в Employee, передайте результат в showId и запустите программу.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить