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:
finalsa inicializuje počas behu (runtime) pri prvom prístupe.constsa inicializuje počas kompilácie (compile-time).
-
Typ hodnôt:
- Premenná
finalmôže obsahovať hodnotu, ktorá sa vypočíta počas behu. - Premenná
constmusí obsahovať hodnotu, ktorá sa dá vypočítať počas kompilácie (literály, výsledok konštantných výrazov).
- Premenná
-
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á |