Junior
Wat is het verschil tussen de sleutelwoorden final en const in Dart?
sobes.tech AI
Antwoord van AI
final en const worden gebruikt om variabelen te maken waarvan de waarden niet kunnen worden gewijzigd nadat ze zijn geïnitialiseerd.
Belangrijkste verschillen:
-
Moment van initialisatie:
finalwordt geïnitialiseerd tijdens runtime bij de eerste toegang.constwordt geïnitialiseerd tijdens compileertijd.
-
Type van waarden:
- De
final-variabele kan een waarde bevatten die tijdens runtime wordt berekend. const-variabele moet een waarde bevatten die tijdens compileertijd kan worden berekend (literalen, resultaat van constante uitdrukkingen).
- De
-
Constantheid:
final: De variabele is constant, maar de waarde waarnaar wordt verwezen (als het een object is) kan wijzigbaar zijn.const: De variabele is constant, en de waarde waarnaar wordt verwezen, moet ook constant (onveranderlijk) zijn.
Voorbeelden:
// final - wordt tijdens runtime geïnitialiseerd
final DateTime now = DateTime.now(); // Waarde is alleen bekend tijdens runtime
// const - wordt tijdens compileertijd geïnitialiseerd
const double pi = 3.14; // Waarde is bekend tijdens compileertijd
// Gebruik van const voor lijsten en kaarten maakt ze onveranderlijk
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Fout! Lijst is onveranderlijk
// Gebruik van final voor lijsten en kaarten maakt de variabele onveranderlijk,
// maar de inhoud van het object kan worden gewijzigd (als het object wijzigbaar is)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Toegestaan, omdat de lijst wijzigbaar is
// final met constante waarde
final int a = 5; // Mogelijk, maar `const` is geschikter
| Initialisatie | Vereisten voor waarde | Wijzigbaarheid van het object (als het naar een object verwijst) | |
|---|---|---|---|
final |
Tijdens runtime | Kan tijdens runtime worden berekend | Kan wijzigbaar zijn als het object wijzigbaar is |
const |
Tijdens compileertijd | Moet bekend zijn tijdens compileertijd | Moet onveranderlijk zijn |