0Pricing
Dart Academy · Урок

Статические члены расширений и конфликты

Устранение конфликтов и добавление статических вспомогательных средств

«Статические члены расширений и конфликты» — бесплатный урок Dart Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Две вспомогательные возможности с одним именем

Импортируйте два расширения, каждое из которых добавляет к String метод с именем parse, — и Dart больше не понимает, какое из них Вы имели в виду.

Почему возникают конфликты

Члены расширения не принадлежат самому типу, поэтому два метода с одинаковыми именами создают неоднозначность, которую компилятор не может разрешить угадыванием.

Найдите ошибку

В такой ситуации Dart сообщает о неоднозначном расширении и останавливается, вместо того чтобы молча выбрать один из вариантов.

"7".parse(); // error: ambiguous between two extensions

Скройте одно расширение при импорте

Используйте hide в импорте, чтобы скрыть по имени одно конфликтующее расширение и позволить другому использоваться при вызове.

import 'b.dart' hide NumberParsing;

Или покажите только одно

Обратный приём — show: он импортирует только перечисленные Вами имена и незаметно исключает остальные.

import 'a.dart' show NumberParsing;

Вызовите его явно

Можно также применить расширение явно: указать его имя и передать значение в круглых скобках.

NumberParsing("7").parse();

Добавление статических членов

Расширения могут содержать и статические члены. Они принадлежат имени расширения, а не значениям, для которых Вы вызываете методы.

extension MathX on num {
  static num clampLow(num x) => x < 0 ? 0 : x;
}

Доступ к статическим членам по имени

Вызывайте статический член через имя расширения, как статический член класса. Значение-получатель при этом не участвует.

print(MathX.clampLow(-3)); // 0

Для статических членов нужно имя

Поскольку доступ к статическим членам осуществляется через расширение, безымянное расширение не может их предоставлять. Назовите его, чтобы использовать статические члены.

Члены экземпляра и статические члены

Члены экземпляра используют this и работают со значением, а статические члены игнорируют значение и принадлежат самому расширению.

Планируйте расширения, чтобы избегать конфликтов

Давайте расширениям ясные, конкретные имена и называйте их члены понятно. Хорошие имена предотвращают большинство конфликтов ещё до того, как понадобятся show или hide.

Быстрая проверка

Один конфликт — одно простое решение. Какой вариант работает?

Итоги: статические члены и конфликты

Вы можете разрешать конфликты расширений с помощью show, hide или явных вызовов, а также добавлять статические члены, доступные через имя расширения. 🧩

Часто задаваемые вопросы

Урок «Статические члены расширений и конфликты» бесплатный?

Да — полный текст урока «Статические члены расширений и конфликты» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Статические члены расширений и конфликты»?

Устранение конфликтов и добавление статических вспомогательных средств Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Статические члены расширений и конфликты»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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