Original article: Constructors in Dart – Use Cases and Examples
La mayoría de nosotros estamos familiarizados con el concepto de constructores. Nos permiten crear diferentes instancias de nuestras clases. Podemos especificar de qué parámetros debe depender la clase cuando se crea una instancia y ocultar la lógica de inicialización interna.
Podemos tener muchos constructores para diferentes casos de uso, o podemos confiar en el predeterminado.
En dart, los constructores juegan un papel similar, pero tienen algunas variaciones que no existen en la mayoría de los lenguajes de programación. Este artículo repasa los diferentes casos de uso y ejemplos de constructores.
En todos los ejemplos de este artículo, usaremos la siguiente clase:
class Coche {
String fabricacion;
String modelo;
String anyoFabricacion;
bool tieneABS;
}
Cómo empezar con los constructores en Dart
Si no especificas ningún constructor en Dart, crearás un constructor predeterminado.
Esto no significa que verás un constructor predeterminado generado en su clase. En cambio, al crear una nueva instancia de tu clase, se llamará a este constructor. No tendrá argumentos y llamará al constructor de la superclase, sin argumentos también.
Para declarar un constructor en tu clase, puedes hacer lo siguiente:
class Coche {
String fabricacion;
String modelo;
String anyoFabricacion;
bool tieneABS;
Coche(String fabricacion, String modelo, int anyo, bool tieneABS) {
this.fabricacion = fabricacion;
this.modelo = modelo;
this.anyoFabricacion = anyo;
this.tieneABS = tieneABS;
}
}
Como puedes imaginar, debe haber una mejor manera de inicializar nuestros campos de clase, y en Dart, la hay:
class Coche {
String fabricacion;
String modelo;
String anyoFabricacion;
bool tieneABS;
Coche(this.fabricacion, this.modelo, this.anyoFabricacion, this.tieneABS);
}
La forma que usamos arriba es una sintaxis sencilla que Dart tiene para simplificar la asignación.
Funciones de constructor más complejas
En otros idiomas, es posible sobrecargar tu constructor. Esto significa que puedes tener diferentes constructores con el mismo nombre, pero con una firma diferente (o un conjunto diferente de argumentos).
Constructores con nombre en Dart
En Dart, esto no es posible, pero hay una forma de hacer algo semejante. Se llama constructores con nombre. Dar a tus constructores diferentes nombres le permite a tu clase tener muchos constructores y también representar mejor sus casos de uso fuera de la clase.
El constructor sinABS inicializa la variable de instancia tieneABS en falso, antes de que se ejecute el cuerpo del constructor. Esto se conoce como lista de inicializadores y puede inicializar varias variables, separadas por una coma.
El caso de uso más común para las listas de inicializadores es inicializar los campos finales declarados por tu clase.
✋ Cualquier cosa que se coloque en el lado derecho de los dos puntos (:) no tiene acceso a this.
Constructores de Factorías en Dart
Un constructor de factoría es un constructor que se puede usar cuando no necesariamente deseas que un constructor cree una nueva instancia de tu clase.
Esto podría ser útil si tienes instancias de tu clase en la memoria y no deseas crear una nueva cada vez (o si la operación de crear una instancia es costosa).
Otro caso de uso es si tienes cierta lógica en tu constructor para inicializar un campo final que no se puede hacer en la lista de inicializadores.
Constructores avanzados en Dart
Constructores de constantes y constructores de redireccionamiento en Dart
Dart también te permite crear constructores de constantes. ¿Qué significa exactamente? Si tu clase representa un objeto que nunca cambiará después de su creación, puede beneficiarse del uso de un constructor de constante. Debes asegurarte de que todos los campos de tu clase sean definitivos.
Cuando deseas que un constructor llame a otro constructor en segundo plano, se le denomina constructores de redireccionamiento.
Para acabar
Cada uno de los constructores que discutimos tiene un propósito y un caso de uso diferente. Depende de ti determinar y comprender cuándo usar cada uno. Con suerte, este artículo te dio el conocimiento necesario para hacerlo.