0Pricing
Dart Academy · Урок

Типы-расширения для обёрток без затрат

Обёртывание типа без дополнительных затрат во время выполнения

«Типы-расширения для обёрток без затрат» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Написание первого расширения
  2. Расширения для обобщённых типов
  3. Статические члены расширений и конфликты
  4. Типы-расширения для обёрток без затрат
← Назад к Dart Academy