0Pricing
Dart Academy · Урок

Конструкторы 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 — локальная установка не требуется.

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

  1. Конструкторы по умолчанию и с параметрами
  2. Именованные конструкторы для ясного замысла
  3. Списки инициализации и перенаправление
  4. Конструкторы factory и const
← Назад к Dart Academy