Junior
Qual è la differenza tra le parole chiave final e const in Dart?
sobes.tech AI
Risposta dell'AI
final e const vengono usati per creare variabili i cui valori non possono essere modificati dopo l'inizializzazione.
Principali differenze:
-
Momento di inizializzazione:
finalviene inizializzato durante l'esecuzione (runtime) al primo accesso.constviene inizializzato durante la compilazione (compile-time).
-
Tipo di valori:
- La variabile
finalpuò contenere un valore calcolato durante l'esecuzione. - La variabile
constdeve contenere un valore calcolabile durante la compilazione (letterali, risultato di espressioni costanti).
- La variabile
-
Constanza:
final: La variabile è costante, ma il valore a cui fa riferimento (se è un oggetto) può essere modificabile.const: La variabile è costante, e il valore a cui fa riferimento deve essere anch'esso costante (immutabile).
Esempi:
// final - inizializzato durante l'esecuzione
final DateTime now = DateTime.now(); // Il valore è noto solo in runtime
// const - inizializzato durante la compilazione
const double pi = 3.14; // Il valore è noto in fase di compilazione
// Usare const per liste e mappe le rende immutabili
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Errore! Lista immutabile
// Usare final per liste e mappe rende la variabile immutabile,
// ma il contenuto dell'oggetto può essere modificato (se l'oggetto è mutabile)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Permesso, poiché la lista è mutabile
// final con valore costante
final int a = 5; // Possibile, ma `const` è più appropriato
| Inizializzazione | Requisiti del valore | Mutabilità dell'oggetto (se si riferisce a un oggetto) | |
|---|---|---|---|
final |
Durante l'esecuzione | Può essere calcolato durante l'esecuzione | Può essere mutabile se l'oggetto lo è |
const |
Durante la compilazione | Deve essere noto durante la compilazione | Deve essere immutabile |