Junior
Каква е разликата между ключовите думи final и const в Dart?
sobes.tech AI
Отговор от 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; // Разрешено, тъй като списъкът е променяем
// final с константна стойност
final int a = 5; // Може, но `const` е по-подходящ
| Инициализация | Изисквания към стойността | Мутабилност на обекта (ако се отнася към обект) | |
|---|---|---|---|
final |
По време на изпълнение | Може да се изчисли по време на изпълнение | Може да бъде променяем, ако обектът е променяем |
const |
По време на компилация | Трябва да бъде известно по време на компилация | Трябва да бъде неизменяем |