Primary Constructors (constructores principales)

Comprender el concepto

Versión mínima requerida del lenguaje Dart: 3.13.

Propósito: Declarar en una sola línea al principio de la clase tanto los campos como el constructor principal, reduciendo drásticamente el código repetitivo. Su comportamiento en tiempo de ejecución es idéntico al de los constructores tradicionales, solo se simplifica la sintaxis.

  1. Declaring parameters (parámetros declarantes) : Los parámetros iniciales marcados con var / final generan automáticamente campos de instancia con el mismo nombre.
  2. Non-declaring parameters (parámetros simples) : Los parámetros sin var/final son únicamente entradas del constructor y no crean campos de clase.
  3. In-body constructors (constructores internos de la clase) : Constructores con nombre, de fábrica o redirigidos escritos entre las llaves de la clase.
  4. Regla obligatoria: Una clase con constructor principal no puede tener otros constructores generativos no redirigidos, para garantizar que todas las instancias pasen por el constructor principal.

Comparación sintaxis tradicional vs abreviatura del constructor principal

// Sintaxis tradicional redundante
class Point {
  int x;
  int y;
  Point(this.x, this.y);
}

// Abreviatura del constructor principal
class Point(var int x, var int y);Lenguaje del código: JavaScript (javascript)

Reglas de generación automática de campos

1. Con var / final

Se crean campos de instancia automáticamente.

Escribe las variables de campo directamente entre paréntesis después del nombre de la clase.

// x e y se convierten automáticamente en variables miembro de la clase
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; // Error: y está declarada como final
}Lenguaje del código: JavaScript (javascript)

Al ejecutar el código anterior aparece un error.

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);Lenguaje del código: JavaScript (javascript)

Causa: La abreviatura class Point(var int x, final int y); denominada Primary Constructors (constructores principales) es una característica experimental de Dart. En la versión estable actual está desactivada por defecto, por lo que al ejecutar directamente se produce un error de sintaxis.

Fecha actual: 10 de julio de 2026, 14:55. Cuando el lector lea este artículo, es posible que Dart haya lanzado una nueva versión oficial que active esta sintaxis por defecto.

Usa este comando para realizar pruebas temporales:

dart run --enable-experiment=primary-constructors

2. Sin var / final

Solo son parámetros temporales, no se generan campos.

class User(String name) {
  // print(name); // Se puede acceder al parámetro directamente dentro de la clase, pero no se crea el campo this.name
  final String msg = "Hi $name"; // Error de compilación
}

void main() {
  final u = User("Tom");
  // print(u.name); // Error de compilación: no existe el campo name
}Lenguaje del código: JavaScript (javascript)

Previous:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *