Skip to content
Kezdőlap » final vagy const

final vagy const

  • Dart

A final és a const is olyan változó típust hoz létre, aminek az értéke állandó. Mindkettő arra utal tehát, hogy létrehozzunk valami olyasmit, ami nem megváltoztatható, azaz konstans.

Egy megjegyzés, hogy ha például a var kulcsszóval hozunk létre változót, akkor annak értéke megváltoztatható.

var elteltPercekSzama= 10;

final

A final-t akkor használjuk, ha egy érték nem változik meg a program futásától kezdve. Futási idejű konstansok. Egy final változónak vagy adunk kezdőértéket, vagy nem.

Ha ismert a típus a létrehozáskor:

final String nev;

Ha nem ismert:

final egyValtozo;

Kezdőértékkel létrehozva pedig:

final String nev = 'Macilaci';

Tehát, amennyiben a final kulcsszóval hozunk létre egy változót:

  • akkor, ha kezdőértékkel hoztuk létre, akkor amíg a program fut, nem lehet megváltoztatni az értékét
  • kezdőérték nélkül létrehozva pedig amikor a futás alatt először értéket kap, az lesz a végleges értéke és ez már nem változtatható meg a futás alatt mégegyszer 

A kód írásának pillanatban nem tudjuk milyen értéket fog felvenni.

Még egy jó példa, ha egy változó egy függvényhívásból kap értéket. Abban a pillanatban, amikor a változót létrehozzuk, akkor még nem ismert az értéke. Tehát futás során kap értéket azt viszont szeretnénk, ha nem változna, ezért final-nak definiáljuk:

final startAlignment = getAlignment();

const

Fordítási idejű konstansok. Létrehozáskor már ismerjük az értéket és az nem is fog változni a futás alatt sem. Tehát futási idejű állandók is egyben.

Példa:

const questions = [
      {
        'questionText': 'What is your favorite color?',
        'answers': ['Red', 'Green', 'Blue', 'Black', 'White']
      },
      {
        'questionText': 'What is your favorite animal?',
        'answers': ['Dog', 'Cat', 'Lizard', 'Shark', 'Elephant']
      },
      {
        'questionText': 'What is your favorite fruit?',
        'answers': ['Apple', 'Pear', 'Blueberry', 'Plum', 'Appricot']
      },
];

Némi bonyolításként a const kulcsszó nem csak a változó neve elé helyezhető el, hanem az érték elé is, bár ebben az esetben a VSCode jelez, hogy szükségtelen kitenni, mert a kettő ugyanazt fogja jelenteni:

const questions = const [

Ha a változó neve elé tesszük, akkor maga a változó lesz állandó. Ha az érték elé, akkor pedig az érték.

Magyarázat: a Dart-ban minden objektum a memóriában tárolódik. A létrehozott változók pedig mutatók ezekre a memória területekre.

Más a helyzet ebben az esetben:

var questions = const [
    {
      'questionText': 'What is your favorite color?',
      'answers': ['Red', 'Green', 'Blue', 'Black', 'White']
    },

Ekkor maga a változó nem állandó, csak a neki adott érték. Tehát később, ha a questions-nek új értéket adunk, azt simán lehet. Ekkor nem jön létre új memóriaterület, hanem a régi felülíródik az újjal.

Tehát a

questions = [];

hatására egy új üres lista jön létre.

Ha viszont a konstans listához akarunk új értéket adni, akkor az már nem lehetséges:

var dummy = const ['hello'];
dummy.add('Aloha');

Ez már nem lehetséges, mert a lista állandó és nem lehet hozzáadni már semmit.

A tanulság, hogy mindig legyünk egyértelműek a kódolás során, és fogalmazzuk meg, hogy mit akarunk.

Még egy példa:

import 'package:flutter/material.dart';

const startAlignment = Alignment.topLeft;

Ebben az esetben már a változó létrehozásának pillanatában ismerjük az értékét, amit nem akarunk, hogy később megváltozzon. Fordítási idejű konstans ez is.

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