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:
finalfutási időben (runtime) kerül inicializálásra az első hozzáféréskor.constfordítási időben (compile-time) kerül inicializálásra.
-
Értéktípus:
- A
finalváltozó tárolhat olyan értéket, amely futási időben számolódik ki. - A
constváltozónak olyan értéket kell tartalmaznia, amely számolható ki fordítási időben (literálok, állandó kifejezések eredménye).
- A
-
Á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 |