Ограниченные параметры типов с extends
Ограничение значений, которые может принимать обобщённый тип
«Ограниченные параметры типов с extends» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Когда любого типа недостаточно
Обычный параметр типа принимает любой тип, но иногда этого мало. Возможно, Вам понадобится вызвать метод, который доступен только у определённых типов. 🔒
Ограничение с extends
Вы можете добавить ограничение с помощью extends. Оно означает, что параметр типа должен быть указанным типом или его подтипом.
class Cage<T extends Animal> {}Что гарантирует ограничение
Внутри класса Dart теперь уверен, что T — как минимум Animal. Поэтому Вы можете безопасно использовать любой член, определённый в Animal.
class Cage<T extends Animal> {
void feed(T a) => a.eat();
}Отклонение неподходящих типов
Компилятор блокирует любой аргумент типа, не удовлетворяющий ограничению. Передача несвязанного типа сразу приводит к ошибке.
Cage<String>();Числовое ограничение
Распространённое ограничение — num, родительский тип для int и double. Оно позволяет обобщённому коду выполнять арифметические операции, принимая оба числовых типа.
T addOne<T extends num>(T x) => x + 1 as T;Ограничения у методов
Ограничения работают и у обобщённых методов, а не только у классов. В методе поместите extends сразу после имени параметра типа.
num biggest<T extends num>(List<T> xs) =>
xs.reduce((a, b) => a > b ? a : b);Ограничение по умолчанию — Object
Если ограничение не указано, неявным ограничением становится Object?. Поэтому неограниченный T позволяет использовать только члены, которые есть у любого объекта.
Ограничение Comparable
Чтобы сортировать или сравнивать значения, задайте ограничение Comparable. Тогда в обобщённом коде можно вызывать compareTo для этих значений.
T max<T extends Comparable<T>>(T a, T b) =>
a.compareTo(b) >= 0 ? a : b;Ограничения описывают назначение
Ограничение также сообщает читателям, какие типы здесь допустимы. Сама сигнатура объясняет контракт, которого ожидает Ваш код.
Самоссылочные ограничения
Обратите внимание: T может встречаться в собственном ограничении, например T extends Comparable из T. Этот шаблон связывает тип с операциями над ним самим.
Сохраняйте ограничения минимальными
Используйте самое слабое ограничение, которого достаточно для работы. Слишком строгие ограничения исключают подходящие типы, а полное отсутствие ограничений не даёт обращаться к полезным методам.
Быстрая проверка
Что позволяет делать ограничение внутри класса?
Итоги
Вы использовали extends, чтобы ограничить параметр типа, открыть доступ к методам ограничивающего типа и отклонять несвязанные типы. Делайте ограничения настолько свободными, насколько требует задача. ✅
Часто задаваемые вопросы
Урок «Ограниченные параметры типов с extends» бесплатный?
Да — полный текст урока «Ограниченные параметры типов с extends» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограниченные параметры типов с extends»?
Ограничение значений, которые может принимать обобщённый тип Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ограниченные параметры типов с extends»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему обобщения лучше dynamic
- Обобщённые классы и методы
- Ограниченные параметры типов с extends
- Обобщённые коллекции на практике