0Pricing
Dart Academy · Урок

Списки инициализации и перенаправление

Установка final-полей и повторное использование конструкторов

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

Установка final-полей

Поле final должно быть установлено до выполнения тела конструктора. Список инициализации — идеальное место, чтобы присвоить ему единственное значение.

class Circle {
  final double area;
  Circle(double r) : area = 3.14 * r * r;
}

Синтаксис списка инициализации

После списка параметров добавьте двоеточие и разделённые запятыми присваивания. Этот список инициализации выполняется до тела конструктора.

Point(int x, int y) : x = x, y = y;

Выполняется до тела

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

class Box {
  final int n;
  Box(int v) : n = v {
    print(n); // available
  }
}

Вычисление производных значений

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

class Rect {
  final int area;
  Rect(int w, int h) : area = w * h;
}

Несколько инициализаторов

Разделяйте несколько присваиваний запятыми. Каждое из них задаёт отдельное поле в одном списке инициализации.

Point(int a, int b) : x = a, y = b;

assert в списке инициализации

В список можно добавить assert, чтобы во время разработки проверять входные данные и обнаруживать недопустимые значения до создания объекта.

Circle(double r) : assert(r > 0), area = 3.14 * r * r;

Перенаправление конструкторов

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

class Point {
  int x, y;
  Point(this.x, this.y);
  Point.zero() : this(0, 0);
}

Зачем перенаправлять конструкторы

Перенаправление позволяет не повторять присваивания полям. Именованный конструктор просто вызывает основной, сохраняя логику в соответствии с принципом DRY.

Point.origin() : this(0, 0);

У перенаправляющих конструкторов нет тела

У перенаправляющего конструктора нет тела. Он лишь передаёт управление целевому конструктору через this(...), который и выполняет всю работу.

class User {
  String name;
  User(this.name);
  User.anon() : this("anon");
}

Порядок выполнения

Запомните последовательность: сначала выполняются список инициализации и перенаправление, затем тело. Устанавливайте final-поля в списке, а дополнительные действия выполняйте в теле.

Список инициализации и тело

Используйте список для присваивания полям, особенно final-полям; тело — для логики, например вывода, проверки помимо assert или вызова методов.

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

Быстрая проверка списков инициализации.

Итоги: инициализация и перенаправление

Теперь вы умеете использовать список инициализации для задания final-полей и вычисления значений, выполнять проверку с помощью assert и перенаправлять один конструктор к другому через this. 🔀

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

Урок «Списки инициализации и перенаправление» бесплатный?

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

Чему я научусь в уроке «Списки инициализации и перенаправление»?

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

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

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

Сколько времени занимает урок «Списки инициализации и перенаправление»?

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

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

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

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

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