Статические члены расширений и конфликты
Устранение конфликтов и добавление статических вспомогательных средств
«Статические члены расширений и конфликты» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Написание первого расширения
- Расширения для обобщённых типов
- Статические члены расширений и конфликты
- Типы-расширения для обёрток без затрат