Junior
Kuo skiriasi raktiniai žodžiai final ir const Dart?
sobes.tech AI
Atsakymas iš AI
final ir const naudojami kuriant kintamuosius, kurių reikšmės negali būti pakeistos po inicializacijos:
Pagrindiniai skirtumai:
-
Inicializavimo laikas:
finalinicijuojamas vykdymo metu (runtime) po pirmojo kreipimosi.constinicijuojamas kompiliacijos metu (compile-time).
-
Reikšmių tipas:
finalkintamasis gali saugoti reikšmę, kuri apskaičiuojama vykdymo metu.constkintamasis turi saugoti reikšmę, kuri gali būti apskaičiuota kompiliacijos metu (literaliai, konstanta išraiškos rezultatas).
-
Konstantiškumas:
final: Kintamasis yra konstanta, bet reikšmė, į kurią jis nuoroda (jei tai objektas), gali būti keičiama.const: Kintamasis yra konstanta, ir reikšmė, į kurią jis nuoroda, taip pat turi būti nekintama.
Pavyzdžiai:
// final - inicijuojama vykdymo metu
final DateTime now = DateTime.now(); // Reikšmė žinoma tik runtime
// const - inicijuojama kompiliacijos metu
const double pi = 3.14; // Reikšmė žinoma kompiliacijos etape
// Naudojant const sąrašams ir žemėlapiams, jie tampa nekintami
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Klaida! Sąrašas nekintamas
// Naudojant final sąrašams ir žemėlapiams, kintamasis tampa nekintamas,
// bet objekto turinys gali būti keičiamas (jei objektas keičiamas)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Leidžiama, nes List yra keičiamas
// final su konstanta reikšme
final int a = 5; // Galima, bet `const` yra tinkamesnis
| Inicializavimo laikas | Reikšmės reikalavimai | Objekto mutabilumas (jei nuoroda į objektą) | |
|---|---|---|---|
final |
Vykdymo metu | Gali būti apskaičiuotas vykdymo metu | Gali būti keičiamas, jei objektas keičiamas |
const |
Kompiliacijos metu | Turi būti žinomas kompiliacijos metu | Turi būti nekintamas |