Sobes.tech
Junior

V čom sa líšia kľúčové slová final a const v Dart?

sobes.tech AI

Odpoveď od AI

final a const sa používajú na vytvorenie premenných, ktorých hodnoty nemožno zmeniť po inicializácii.

Hlavné rozdiely:

  • Čas inicializácie:

    • final sa inicializuje počas behu (runtime) pri prvom prístupe.
    • const sa inicializuje počas kompilácie (compile-time).
  • Typ hodnôt:

    • Premenná final môže obsahovať hodnotu, ktorá sa vypočíta počas behu.
    • Premenná const musí obsahovať hodnotu, ktorá sa dá vypočítať počas kompilácie (literály, výsledok konštantných výrazov).
  • Konštantnosť:

    • final: Premenná je konštantná, ale hodnota, na ktorú odkazuje (ak je to objekt), môže byť zmeniteľná.
    • const: Premenná je konštantná, a hodnota, na ktorú odkazuje, musí byť tiež konštantná (nemenná).

Príklady:

// final - inicializuje sa počas behu
final DateTime now = DateTime.now(); // Hodnota je známa iba v čase behu

// const - inicializuje sa počas kompilácie
const double pi = 3.14; // Hodnota je známa v čase kompilácie

// Použitie const pre zoznamy a mapy ich robí nemennými
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Chyba! Zoznam je nemenný

// Použitie final pre zoznamy a mapy robí premennú nemennou,
// ale obsah objektu môže byť zmenený (ak je objekt zmeniteľný)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Povolené, pretože zoznam je zmeniteľný

// final s konštantnou hodnotou
final int a = 5; // Môže, ale `const` je vhodnejšie
Inicializácia Požiadavky na hodnotu Môžiteľnosť objektu (ak odkazuje na objekt)
final Počas behu Môže byť vypočítaná počas behu Môže byť zmeniteľná, ak je objekt zmeniteľný
const Počas kompilácie Musí byť známa počas kompilácie Musí byť nemenná