Primary Constructors (Hauptkonstruktoren)

Konzept verstehen

Mindest erforderliche Dart-Sprachversion: 3.13.

Zweck: In einer Zeile am Anfang der Klasse gleichzeitig Felder + Hauptkonstruktor deklarieren, dadurch Boilerplate-Code stark reduzieren. Das Laufzeitverhalten ist identisch mit herkömmlichen Konstruktoren, lediglich die Syntax wurde vereinfacht.

  1. Declaring parameters (deklarierende Parameter) : Parameter am Klassenanfang mit var / final erzeugen automatisch Instanzfelder mit gleichem Namen.
  2. Non-declaring parameters (einfache Parameter) : Parameter ohne var/final sind nur Eingabewerte des Konstruktors und erzeugen keine Klassenfelder.
  3. In-body constructors (innen liegende Konstruktoren) : Benannte, Fabrik- oder umleitende Konstruktoren, die innerhalb der geschweiften Klammern der Klasse stehen.
  4. Zwingende Regel: Eine Klasse mit Hauptkonstruktor darf keine weiteren nicht umleitenden generativen Konstruktoren besitzen, damit alle Instanzen zwingend den Hauptkonstruktor durchlaufen.

Vergleich herkömmliche Syntax vs. Kurzform des Hauptkonstruktors

// Herkömmliche ausführliche Schreibweise
class Point {
  int x;
  int y;
  Point(this.x, this.y);
}

// Kurzform mit Hauptkonstruktor
class Point(var int x, var int y);Code-Sprache: JavaScript (javascript)

Regeln zur automatischen Felderzeugung

1. Mit var / final

Es werden automatisch Instanzfelder erstellt.

Schreiben Sie die Feldvariablen direkt in die Klammern nach dem Klassennamen.

// x und y werden automatisch zu Mitgliedsvariablen der Klasse
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; // Fehler: y ist mit final deklariert
}Code-Sprache: JavaScript (javascript)

Beim Ausführen des obigen Codes tritt ein Fehler auf.

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);Code-Sprache: JavaScript (javascript)

Ursache: Die Kurzschreibweise class Point(var int x, final int y); mit dem Namen Primary Constructors (Hauptkonstruktoren) ist eine experimentelle Funktion von Dart. In der aktuellen stabilen Dart-Version ist sie standardmäßig deaktiviert, daher tritt bei direktem Ausführen ein Syntaxfehler auf.

Aktueller Termin: 10. Juli 2026, 14:55 Uhr. Zum Zeitpunkt der Lektüre dieses Artikels hat Dart möglicherweise eine neue offizielle Version veröffentlicht, die diese Syntax standardmäßig unterstützt.

Verwenden Sie diesen Befehl zum temporären Testen:

dart run --enable-experiment=primary-constructors

2. Ohne var / final

Nur temporäre Parameter, es werden keine Felder erzeugt.

class User(String name) {
  // print(name); // Auf den Parameter kann innerhalb der Klasse direkt zugegriffen werden, aber es entsteht kein Feld this.name
  final String msg = "Hi $name"; // Kompilierfehler
}

void main() {
  final u = User("Tom");
  // print(u.name); // Kompilierfehler: Feld name existiert nicht
}Code-Sprache: JavaScript (javascript)

Previous:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert