Junior
Care este diferența dintre cuvintele cheie final și const în Dart?
sobes.tech AI
Răspuns de la AI
final și const sunt utilizate pentru crearea variabilelor ale căror valori nu pot fi modificate după inițializare.
Principalele diferențe:
-
Momentul inițializării:
finaleste inițializat în timpul execuției (runtime) la prima accesare.consteste inițializat în timpul compilării (compile-time).
-
Tipul valorilor:
- Variabila
finalpoate stoca o valoare calculată în timpul execuției. - Variabila
consttrebuie să conțină o valoare calculabilă în timpul compilării (literale, rezultat al expresiilor constante).
- Variabila
-
Constantitudine:
final: Variabila este constantă, dar valoarea la care face referire (dacă este un obiect) poate fi modificabilă.const: Variabila este constantă, iar valoarea la care face referire trebuie să fie și ea constantă (imposibil de modificat).
Exemple:
// final - inițializat în timpul execuției
final DateTime now = DateTime.now(); // Valoarea este cunoscută doar în timpul runtime
// const - inițializat în timpul compilării
const double pi = 3.14; // Valoarea este cunoscută în timpul compilării
// Utilizarea const pentru liste și hărți le face immutable
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Eroare! Lista este imutabilă
// Utilizarea final pentru liste și hărți face variabila imutabilă,
// dar conținutul obiectului poate fi modificat (dacă obiectul este modificabil)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Permis, deoarece lista este modificabilă
// final cu valoare constantă
final int a = 5; // Se poate, dar `const` este mai potrivit
| Inițializare | Cerințe pentru valoare | Mutabilitatea obiectului (dacă face referire la un obiect) | |
|---|---|---|---|
final |
În timpul execuției | Poate fi calculată în timpul execuției | Poate fi modificabil dacă obiectul este modificabil |
const |
În timpul compilării | Trebuie să fie cunoscută în timpul compilării | Trebuie să fie imuabilă |