Primary Constructors (constructeurs principaux)

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.

  1. Declaring parameters (paramètres déclarants) : Les paramètres de tête marqués par var / final génèrent automatiquement des champs d’instance portant le même nom.
  2. Non-declaring parameters (paramètres simples) : Les paramètres sans var/final ne sont que des entrées du constructeur et ne créent pas de champs de classe.
  3. In-body constructors (constructeurs internes à la classe) : Les constructeurs nommés, usine ou de redirection écrits entre les accolades de la classe.
  4. 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)

Previous:

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *