Comprendre le concept
Version minimale du langage Dart requise : 3.13.
Rôle : Déclarer en une seule ligne au début de la classe à la fois les champs et le constructeur principal, ce qui réduit considérablement le code répétitif. Son comportement à l’exécution est identique à celui des constructeurs traditionnels, seule la syntaxe est simplifiée.
- Declaring parameters (paramètres déclarants) : Les paramètres de tête marqués par
var/finalgénèrent automatiquement des champs d’instance portant le même nom. - Non-declaring parameters (paramètres simples) : Les paramètres sans
var/finalne sont que des entrées du constructeur et ne créent pas de champs de classe. - In-body constructors (constructeurs internes à la classe) : Les constructeurs nommés, usine ou de redirection écrits entre les accolades de la classe.
- Règle obligatoire : Une classe dotée d’un constructeur principal ne peut pas posséder d’autres constructeurs génératifs non redirigés, afin de garantir que toutes les instances passent par le constructeur principal.
Comparaison syntaxe traditionnelle et raccourci du constructeur principal
// Syntaxe traditionnelle verbeuse
class Point {
int x;
int y;
Point(this.x, this.y);
}
// Raccourci du constructeur principal
class Point(var int x, var int y);Langage du code : JavaScript (javascript)
Règles de génération automatique des champs
1. Avec var / final
Des champs d’instance sont créés automatiquement.
Écrivez directement les variables de champ entre parenthèses après le nom de la classe.
// x et y deviennent automatiquement des variables membres de la classe
class Point(var int x, final int y);
void main() {
final p = Point(10, 20);
print(p.x); // 10
print(p.y); // 20
// p.y = 30; // Erreur : y est déclaré final
}Langage du code : JavaScript (javascript)
L’exécution du code ci-dessus provoque une erreur.
D:\dartdemo\firstdart\bin>dart run
Building package executable...
Failed to build firstdart:firstdart:
firstdart.dart:2:13: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^^^
firstdart.dart:2:12: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);
^
firstdart.dart:2:36: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
Try passing the '--enable-experiment=primary-constructors' command line option.
class Point(var int x, final int y);Langage du code : JavaScript (javascript)
Cause : La syntaxe raccourcie class Point(var int x, final int y); appelée Primary Constructors (constructeurs principaux) est une fonctionnalité expérimentale de Dart. Elle est désactivée par défaut dans la version stable actuelle, donc l’exécution directe entraîne une erreur de syntaxe.
Date actuelle : 10 juillet 2026 à 14h55. Lorsque le lecteur consulte cet article, Dart aura peut-être publié une nouvelle version officielle activant cette syntaxe par défaut.
Utilisez cette commande pour tester temporairement :
dart run --enable-experiment=primary-constructors

2. Sans var / final
Ce ne sont que des paramètres temporaires, aucun champ n’est généré.
class User(String name) {
// print(name); // On accède directement au paramètre dans la classe, mais aucun champ this.name n’est créé
final String msg = "Hi $name"; // Erreur de compilation
}
void main() {
final u = User("Tom");
// print(u.name); // Erreur de compilation : le champ name n’existe pas
}Langage du code : JavaScript (javascript)