Skip to content
Kezdőlap » var, final, const

var, final, const

Tegyük tisztába a dolgot, hogy mikor melyiket is használjuk a var, final és const kulcsszavak közül, amikor létrehozunk egy változót.

final

Adott egy final kulcsszóval létrehozott lista:

final numbers = [1, 2, 3];

Ha hozzá akarok adni egy elemet, akkor a

numbers.add(4);

utasítással tudom megtenni és nem kapok hibát. Pedig a változót a final kulcsszóval hoztam létre. Hogyan lehetséges ez?

A final egyszerűen azt jelenti, hogy a változó, amit létrehoztunk végleges, vagyis nem tudunk új értéket hozzárendelni. A numbers változó beállítása a létrehozáskor már megtörtént. Ami azt jelenti a final miatt, hogy azt viszont már nem tudnánk megtenni, hogy egy új értékadással másik listát töltök bele. Tehát a következő hibás lesz:

numbers = [4, 5, 6];
final hiba

Más irányból megközelítve, a változó létrehozásán kívül más esetben nem használhatjuk a változón a hozzárendelés operátort, vagyis az egyenlőség jelet.

A numbers.add(4) azért működik, mert ebben az esetben egy már a memóriában létező változóhoz adtunk hozzá egy értéket. A number tehát ugyanaz az objektum (lista) a memóriában. Az egyenlőség jellel viszont egy vadi új objektum születne a memóriában. És a final ezt nem engedi meg.

var

A var kulcsó esetében más a helyzet, mert a var megengedi, hogy egy új értéket (új memória területet) rendeljünk egy változóhoz.

var numbers = [1, 2, 3];
numbers = [4, 5, 6]; // ok
number.add(4);  // ez is ok

Tehát, amikor a var-ral létrehozunk egy változót, akkor ehhez a változóhoz tartozni fog a memóriában egy terület, egy memória cím.

Amikor új értéket rendelünk ehhez a változóhoz, akkor egy teljesen új memóriaterület fog a változóhoz tartozni. Ráaádásul ez az új memória terület felülírja / törli a régi területet és egyúttal a változót is tehát. Attól nem kell félni, hogy a régi memóriaterület feleslegesen ott marad a memóriában, mert a Dart elvégzi a nagytakarítást és felszabadítja a memória területet.

const

Ha const kulcsszóval hozunk létre egy változót, akkor a final-hoz hasonlóan nem tudunk új értéket a változóhoz rendelni.
Viszont ebben az esetben a number.add(4) sem működik.

Ugyanis a const-tal azt mondjuk a Dart-nak, hogy ez a változó / lista nem csak, hogy végleges (final), de a listában levő elemek nem változtathatók meg. A lista nem bővíthető és nem is szűkíthető. Teljesen szent és sérthetetlen.

Amikor egy widget neve elé írjuk a kódban a const kulcsszót, mert a VSCode erre figyelmeztet is, akkor az azt jelenti, hogy a Flutter újra tudja használni ezeket az objektumokat / widgeteket a memóriában.

Egyébként az is érvényes lenne, ha úgy írnánk a kódban, hogy

final numbers = const [1, 2, 3];

Ennek az ún. shortcut-ja a

const numbers = [1, 2, 3];

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük