Junior
Quelle est la différence entre les mots-clés final et const en Dart?
sobes.tech IA
Réponse de l'IA
final et const sont utilisés pour créer des variables dont les valeurs ne peuvent pas être modifiées après l'initialisation.
Principales différences :
-
Moment de l'initialisation :
finalest initialisé au moment de l'exécution (runtime) lors de la première utilisation.constest initialisé lors de la compilation (compile-time).
-
Type de valeurs :
- La variable
finalpeut contenir une valeur calculée lors de l'exécution. - La variable
constdoit contenir une valeur calculable lors de la compilation (littéraux, résultats d'expressions constantes).
- La variable
-
Constance :
final: La variable est constante, mais la valeur à laquelle elle fait référence (si c'est un objet) peut être modifiable.const: La variable est constante, et la valeur à laquelle elle fait référence doit également être constante (immutable).
Exemples :
// final - initialisé lors de l'exécution
final DateTime now = DateTime.now(); // La valeur n'est connue qu'en runtime
// const - initialisé lors de la compilation
const double pi = 3.14; // La valeur est connue à l'étape de compilation
// Utiliser const pour les listes et les cartes les rend immuables
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Erreur ! La liste est immuable
// Utiliser final pour les listes et les cartes rend la variable immuable,
// mais le contenu de l'objet peut être modifié (si l'objet est mutable)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Permis, car la liste elle-même est mutable
// final avec une valeur constante
final int a = 5; // Possible, mais `const` serait plus approprié
| Initialisation | Exigences concernant la valeur | Mutabilité de l'objet (si référence à un objet) | |
|---|---|---|---|
final |
Lors de l'exécution | Peut être calculé lors de l'exécution | Peut être mutable si l'objet l'est |
const |
Lors de la compilation | Doit être connu lors de la compilation | Doit être immuable |