Sobes.tech
Junior

Czym różnią się słowa kluczowe final i const w Dart?

sobes.tech AI

Odpowiedź od AI

final i const są używane do tworzenia zmiennych, których wartości nie można zmienić po inicjalizacji.

Główne różnice:

  • Moment inicjalizacji:

    • final jest inicjalizowane podczas wykonywania (runtime) przy pierwszym odwołaniu.
    • const jest inicjalizowane podczas kompilacji (compile-time).
  • Typ wartości:

    • Zmienna final może przechowywać wartość obliczaną podczas wykonywania.
    • Zmienna const musi przechowywać wartość obliczalną podczas kompilacji (literale, wynik wyrażeń stałych).
  • Stałość:

    • final: Zmienna jest stała, ale wartość, na którą się odwołuje (jeśli jest to obiekt), może być zmienna.
    • const: Zmienna jest stała, a wartość, na którą się odwołuje, musi być również stała (niezmienna).

Przykłady:

// final - inicjalizuje się podczas wykonywania
final DateTime now = DateTime.now(); // Wartość znana tylko w czasie wykonywania

// const - inicjalizuje się podczas kompilacji
const double pi = 3.14; // Wartość znana na etapie kompilacji

// Użycie const dla list i map czyni je niezmiennymi
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Błąd! Lista jest niezmienna

// Użycie final dla list i map czyni zmienną niezmienną,
// ale zawartość obiektu może być zmieniona (jeśli obiekt jest zmienny)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Dozwolone, ponieważ lista jest zmienna

// final z wartością stałą
final int a = 5; // Można, ale `const` jest bardziej odpowiednie
Inicjalizacja Wymagania dotyczące wartości Mutowalność obiektu (jeśli odwołuje się do obiektu)
final W czasie wykonywania Może być obliczona podczas wykonywania Może być zmienna, jeśli obiekt jest zmienny
const W czasie kompilacji Musi być znana podczas kompilacji Musi być niezmienna