Sobes.tech
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 По време на компилация Трябва да бъде известно по време на компилация Трябва да бъде неизменяем