Типы-расширения для обёрток без затрат
Обёртывание типа без дополнительных затрат во время выполнения
«Типы-расширения для обёрток без затрат» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Другой инструмент
Тип-расширение — это более новая возможность: он оборачивает существующий тип и предоставляет ему новый интерфейс без затрат во время выполнения.
Обёртка без упаковки
В отличие от настоящего класса-обёртки, тип-расширение не создаёт никакого объекта во время выполнения. Во время выполнения он просто является базовым значением.
extension type UserId(int id) {}Тип представления
Значение в круглых скобках — это тип представления. В данном случае UserId на самом деле является обычным int с более безопасным именем.
extension type Meters(double value) {}Простое создание
Тип-расширение создаётся так же, как вызывается конструктор: базовое значение передаётся непосредственно внутрь.
var id = UserId(42);
var d = Meters(3.5);Добавление безопасных методов
Внутри тела можно добавить методы и геттеры, работающие с обёрнутым значением и придающие ему настоящий смысл.
extension type Meters(double value) {
Meters plus(Meters o) => Meters(value + o.value);
}Надёжнее, чем typedef
typedef — это всего лишь псевдоним, а тип-расширение — отдельный тип. Вы не сможете случайно смешать UserId с обычным int.
int raw = 42;
// UserId u = raw; // error: not interchangeableСкройте API базового типа
По умолчанию тип-расширение скрывает члены обёрнутого типа, поэтому доступны только предоставленные Вами методы.
var m = Meters(2.0);
// m.toStringAsFixed(2); // not available unless exposedИли используйте implements для их предоставления
Добавьте implements, чтобы передавать члены базового типа и позволить вызывающему коду использовать и Ваш API, и базовый тип.
extension type Score(int value) implements int {}
print(Score(9) + 1); // 10Нулевые затраты во время выполнения
Поскольку настоящий объект не создаётся, тип-расширение ничего не стоит во время выполнения. Вы получаете типобезопасность бесплатно.
Отличный выбор для предметных идентификаторов
Они особенно полезны для типизированных идентификаторов, таких как UserId или Email: это не позволит передать не тот int не в тот параметр.
void load(UserId id) {}
load(UserId(7)); // load(7) would not compileРасширения и типы-расширения
Расширение добавляет методы к общему для всех типу, а тип-расширение создаёт новый, отдельный тип вокруг значения.
Быстрая проверка
Последняя проверка: что делает типы-расширения особенными?
Итоги: типы-расширения
Вы познакомились с типами-расширениями: отдельными бесплатными обёртками над типом представления, которые идеально подходят для безопасных идентификаторов и единиц измерения без дополнительных затрат во время выполнения. 🏁
Часто задаваемые вопросы
Урок «Типы-расширения для обёрток без затрат» бесплатный?
Да — полный текст урока «Типы-расширения для обёрток без затрат» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Типы-расширения для обёрток без затрат»?
Обёртывание типа без дополнительных затрат во время выполнения Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Типы-расширения для обёрток без затрат»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Написание первого расширения
- Расширения для обобщённых типов
- Статические члены расширений и конфликты
- Типы-расширения для обёрток без затрат