0Pricing
Dart Academy · Урок

Ограниченные параметры типов с 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 — локальная установка не требуется.

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

  1. Почему обобщения лучше dynamic
  2. Обобщённые классы и методы
  3. Ограниченные параметры типов с extends
  4. Обобщённые коллекции на практике
← Назад к Dart Academy