Sobes.tech
Junior

Mi a különbség a final és a const kulcsszavak között Dartban?

sobes.tech MI

Válasz az MI-től

final és const változókat arra használják, hogy olyan változókat hozzanak létre, amelyek értéke nem változik az inicializálás után.

Fő különbségek:

  • Inicializálás ideje:

    • final futási időben (runtime) kerül inicializálásra az első hozzáféréskor.
    • const fordítási időben (compile-time) kerül inicializálásra.
  • Értéktípus:

    • A final változó tárolhat olyan értéket, amely futási időben számolódik ki.
    • A const változónak olyan értéket kell tartalmaznia, amely számolható ki fordítási időben (literálok, állandó kifejezések eredménye).
  • Állandóság:

    • final: A változó állandó, de az érték, amelyre hivatkozik (ha objektum), módosítható lehet.
    • const: A változó állandó, és az érték, amelyre hivatkozik, szintén állandó (nem változtatható).

Példák:

// final - futási időben inicializálódik
final DateTime now = DateTime.now(); // Az érték csak futási időben ismert

// const - fordítási időben inicializálódik
const double pi = 3.14; // Az érték fordítási időben ismert

// A const használata listáknál és térképeknél azokat változatlanná teszi
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Hiba! A lista változatlan

// A final használata listáknál és térképeknél a változót változatlanná teszi,
// de a tartalom módosítható (ha az objektum módosítható)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Engedélyezett, mivel a lista módosítható

// végleges értékű final
final int a = 5; // Lehetséges, de a `const` alkalmasabb
Inicializálás ideje Követelmények az értékre Az objektum módosíthatósága (ha objektumra mutat)
final Futási időben Futási időben kiszámítható Módosítható, ha az objektum módosítható
const Fordítási időben Fordítási időben ismert kell legyen Módosíthatatlan kell legyen