final и const используются для создания переменных, значения которых нельзя изменить после инициализации.
Основные отличия:
Время инициализации:
final инициализируется во время выполнения (runtime) при первом обращении.const инициализируется во время компиляции (compile-time).Тип значений:
final переменная может хранить значение, которое вычисляется во время выполнения.const переменная должна хранить значение, которое может быть вычислено во время компиляции (литералы, результат константных выражений).Константность:
final: Переменная является константной, но значение, на которое она ссылается (если это объект), может быть изменяемым.const: Переменная является константной, и значение, на которое она ссылается, также должно быть константным (неизменяемым).Примеры:
dart
| Инициализация | Требования к значению | Мутабельность объекта (если ссылается на объект) | |
|---|---|---|---|
final | Во время выполнения | Может вычисляться во время выполнения | Может быть изменяемым, если объект по своей сути изменяемый |
const | Во время компиляции | Должно быть известно во время компиляции | Должно быть неизменяемым |