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:
finaljest inicjalizowane podczas wykonywania (runtime) przy pierwszym odwołaniu.constjest inicjalizowane podczas kompilacji (compile-time).
-
Typ wartości:
- Zmienna
finalmoże przechowywać wartość obliczaną podczas wykonywania. - Zmienna
constmusi przechowywać wartość obliczalną podczas kompilacji (literale, wynik wyrażeń stałych).
- Zmienna
-
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 |