Sobes.tech
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:

    • final viene inizializzato durante l'esecuzione (runtime) al primo accesso.
    • const viene inizializzato durante la compilazione (compile-time).
  • Tipo di valori:

    • La variabile final può contenere un valore calcolato durante l'esecuzione.
    • La variabile const deve contenere un valore calcolabile durante la compilazione (letterali, risultato di espressioni costanti).
  • 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