Sobes.tech
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:

    • final inicijuojamas vykdymo metu (runtime) po pirmojo kreipimosi.
    • const inicijuojamas kompiliacijos metu (compile-time).
  • Reikšmių tipas:

    • final kintamasis gali saugoti reikšmę, kuri apskaičiuojama vykdymo metu.
    • const kintamasis 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