Списки инициализации и перенаправление
Установка 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 — локальная установка не требуется.
Все уроки этого курса
- Конструкторы по умолчанию и с параметрами
- Именованные конструкторы для ясного замысла
- Списки инициализации и перенаправление
- Конструкторы factory и const