Конструкторы factory и const
Кэширование, возврат подтипов и создание объектов во время компиляции
«Конструкторы factory и const» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Что такое фабричный конструктор
Фабричный конструктор выглядит как обычный, но вы управляете возвращаемым им результатом, поэтому ему не обязательно каждый раз создавать совершенно новый объект.
class Logger {
factory Logger() => _shared;
}Фабричный конструктор может вернуть кэшированный объект
Поскольку фабричный конструктор возвращает объект, а не всегда создаёт новый, он может вернуть кэшированный экземпляр — это особенно удобно для одиночек или пулов объектов.
class Logger {
static final _it = Logger._();
Logger._();
factory Logger() => _it;
}Фабричный конструктор может вернуть подтип
Фабричный конструктор может вернуть любой объект подходящего типа, включая подкласс, позволяя выбрать конкретный класс во время выполнения.
factory Shape(String k) =>
k == "box" ? Box() : Dot();Фабричный конструктор обязан вернуть результат
В отличие от обычного конструктора, фабричный конструктор содержит тело, которое должно вернуть экземпляр; он не устанавливает поля напрямую через this.
factory User.fromJson(Map j) {
return User(j["name"]);
}Распространённая фабрика для разбора данных
Шаблон фабрики особенно полезен для разбора данных, например при создании объекта из карты. Подход fromJson повсеместно используется в Dart и Flutter.
factory User.fromJson(Map<String, dynamic> j) =>
User(j["name"]);Что такое const-конструктор
Конструктор const позволяет создавать константные объекты времени компиляции, поля которых являются final и известны заранее.
class Point {
final int x, y;
const Point(this.x, this.y);
}Создание экземпляров const
Вызовите его с ключевым словом const, чтобы создать неизменяемый объект. Два объекта const с одинаковыми значениями являются одним и тем же экземпляром.
const a = Point(1, 2);
const b = Point(1, 2);
print(identical(a, b)); // trueПравила для const-конструкторов
Каждое поле должно быть final, а тело конструктора — пустым. Благодаря этим правилам Dart может зафиксировать объект во время компиляции.
class Color {
final int v;
const Color(this.v);
}const экономит память
Идентичные объекты const канонизируются в один общий экземпляр, поэтому повторное использование не требует дополнительной памяти.
const reds = [Color(255), Color(255)];Фабричный конструктор и const: краткое сравнение
Выбирайте фабричный конструктор, когда нужно определить возвращаемый объект во время выполнения; выбирайте const для неизменяемых значений времени компиляции.
Объединение идей
Класс может предоставить обычный конструктор, фабричный конструктор для разбора данных и конструктор const для фиксированных значений, покрывая все потребности в создании объектов.
Быстрая проверка
Быстрая проверка фабричных конструкторов.
Итоги: фабричные конструкторы и const
Вы узнали, что фабричные конструкторы управляют возвращаемым результатом, а конструкторы const создают общие неизменяемые объекты времени компиляции. Отличная работа! 🎉
Часто задаваемые вопросы
Урок «Конструкторы factory и const» бесплатный?
Да — полный текст урока «Конструкторы factory и const» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Конструкторы factory и const»?
Кэширование, возврат подтипов и создание объектов во время компиляции Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Конструкторы factory и const»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Конструкторы по умолчанию и с параметрами
- Именованные конструкторы для ясного замысла
- Списки инициализации и перенаправление
- Конструкторы factory и const