Назад к вопросам
Junior
202
questionbank

Чем отличаются ключевые слова final и const в Dart?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

final и const используются для создания переменных, значения которых нельзя изменить после инициализации.

Основные отличия:

  • Время инициализации:

    • final инициализируется во время выполнения (runtime) при первом обращении.
    • const инициализируется во время компиляции (compile-time).
  • Тип значений:

    • final переменная может хранить значение, которое вычисляется во время выполнения.
    • const переменная должна хранить значение, которое может быть вычислено во время компиляции (литералы, результат константных выражений).
  • Константность:

    • final: Переменная является константной, но значение, на которое она ссылается (если это объект), может быть изменяемым.
    • const: Переменная является константной, и значение, на которое она ссылается, также должно быть константным (неизменяемым).

Примеры:

// final - инициализируется во время выполнения
final DateTime now = DateTime.now(); // Значение известно только в runtime

// const - инициализируется во время компиляции
const double pi = 3.14; // Значение известно на этапе компиляции

// Использование const для списков и карт делает их неизменяемыми
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Ошибка! Список неизменяемый

// Использование final для списков и карт делает переменную неизменяемой,
// но содержимое объекта может быть изменено (если объект изменяемый)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Разрешено, так как сам List изменяемый

// final с константным значением
final int a = 5; // Можно, но const более уместен
Инициализация Требования к значению Мутабельность объекта (если ссылается на объект)
final Во время выполнения Может вычисляться во время выполнения Может быть изменяемым, если объект по своей сути изменяемый
const Во время компиляции Должно быть известно во время компиляции Должно быть неизменяемым