Ответ
Const конструктор в Dart создаёт объекты, которые являются неизменяемыми (immutable) и вычисляются на этапе компиляции. Это позволяет компилятору кэшировать и повторно использовать идентичные экземпляры, что экономит память и повышает производительность.
Ключевые условия для использования const конструктора:
- Все поля класса должны быть объявлены как
final. - Сам класс должен быть неизменяемым.
Пример:
class ImmutablePoint {
final double x;
final double y;
const ImmutablePoint(this.x, this.y);
}
void main() {
const point1 = ImmutablePoint(5.0, 10.0); // Создаётся в compile-time
const point2 = ImmutablePoint(5.0, 10.0); // Используется кэшированный экземпляр
print(identical(point1, point2)); // true — это один и тот же объект в памяти
// Сравнение с обычным конструктором:
final point3 = ImmutablePoint(5.0, 10.0);
final point4 = ImmutablePoint(5.0, 10.0);
print(identical(point3, point4)); // false — разные объекты
}
Практическое применение во Flutter:
Const конструкторы активно используются в виджетах Flutter для оптимизации перестроений. Например, Text, SizedBox, Padding имеют const конструкторы, что позволяет Flutter избегать лишних ререндеров при создании неизменяемых виджетов.
Ответ 18+ 🔞
А, ну это про const конструкторы в Dart! Давайте разберём, что это за хитрая жопа такая, а то многие впадают в ступор, когда видят это слово.
Представьте, что вы печёте пирожки. Обычный конструктор — это когда вы каждый раз лепите новый пирожок, даже если начинка и тесто одинаковые. А const конструктор — это волшебная печь, которая, если вы уже испекли точно такой же пирожок, просто достаёт его из холодильника и говорит: «На, братан, не парься, уже есть готовый». Экономия времени и муки — красота!
Так вот, главные правила, чтобы твой класс мог такую магию творить:
- Все поля —
final. То есть, после создания объект менять нельзя. Никаких «ой, а давай я тутxпоправлю». Раз родился — таким и помрёшь. - Сам конструктор помечен словечком
const. Без этого — никакой магии, обычный пекарь.
Смотрите, как это выглядит в коде:
class ImmutablePoint {
final double x;
final double y;
const ImmutablePoint(this.x, this.y); // Вот он, красавец!
}
void main() {
// Используем магию const
const point1 = ImmutablePoint(5.0, 10.0); // Пирожок №1 испечён и положен в холодильник.
const point2 = ImmutablePoint(5.0, 10.0); // Ага, такой уже есть! Достаём из холодильника.
print(identical(point1, point2)); // true — это один и тот же объект в памяти! Овердохуища!
// А теперь без магии
final point3 = ImmutablePoint(5.0, 10.0); // Леплю новый пирожок.
final point4 = ImmutablePoint(5.0, 10.0); // Леплю ещё один, хоть и одинаковый.
print(identical(point3, point4)); // false — два разных пирожка, два разных объекта. Пекарь устал.
}
А где это реально втыкают?
Да везде, блядь! Особенно во Flutter'е. Там каждый чих — это виджет. И чтобы движок не сходил с ума, перестраивая одни и те же неизменные коробочки (SizedBox), тексты (Text) или отступы (Padding), их делают через const. Говоришь ему: «Эй, const SizedBox(height: 20), и он тебе не создаёт новый объект на каждом кадре, а тырит уже готовый из кэша. Умно, ёпта!
Так что запомни: const конструктор — это не просто прикол, это реальная оптимизация. Создал неизменяемый класс — сразу думай, не сделать ли конструктор const. Мозг компилятора скажет спасибо, а приложение будет летать.