Junior
Koja je razlika između ključnih reči final i const u Dart-u?
sobes.tech АИ
Одговор од АИ
final и const se koriste za kreiranje promenljivih čije vrednosti ne mogu biti promenjene nakon inicijalizacije.
Glavne razlike:
-
Vreme inicijalizacije:
finalse inicijalizuje tokom izvršavanja (runtime) pri prvom pristupu.constse inicijalizuje tokom kompilacije (compile-time).
-
Tip vrednosti:
- Promenljiva
finalmože sadržati vrednost koja se računa tokom izvršavanja. - Promenljiva
constmora sadržati vrednost koja se može izračunati tokom kompilacije (literali, rezultat konstanti izraza).
- Promenljiva
-
Konstantnost:
final: Promenljiva je konstantna, ali vrednost na koju se odnosi (ako je objekat) može biti promenljiva.const: Promenljiva je konstantna, i vrednost na koju se odnosi takođe mora biti konstantna (nepromenljiva).
Primeri:
// final - inicijalizuje se tokom izvršavanja
final DateTime now = DateTime.now(); // Vrednost je poznata samo u runtime
// const - inicijalizuje se tokom kompilacije
const double pi = 3.14; // Vrednost je poznata u fazi kompilacije
// Korišćenje const za liste i mape ih čini nepromenljivim
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Greška! Lista je nepromenljiva
// Korišćenje final za liste i mape čini promenljivu nepromenljivom,
// ali sadržaj objekta može biti izmenjen (ako je objekat promenljiv)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Dozvoljeno, jer je lista promenljiva
// final sa konstantnom vrednošću
final int a = 5; // Moguće, ali `const` je prikladnije
| Inicijalizacija | Zahtevi za vrednost | Mutabilnost objekta (ako se odnosi na objekat) | |
|---|---|---|---|
final |
Tokom izvršavanja | Može se izračunati tokom izvršavanja | Može biti promenljiv ako je objekat promenljiv |
const |
Tokom kompilacije | Mora biti poznato tokom kompilacije | Mora biti nepromenljivo |