
Name constructors
Los constructores con nombre, también conocidos como constructores nombrados o constructores de fábrica, son constructores especiales en Dart que tienen un nombre y proporcionan una forma alternativa de crear objetos de una clase. A diferencia del constructor predeterminado que tiene el mismo nombre que la clase, los constructores con nombre permiten definir múltiples formas de construir objetos con diferentes parámetros o configuraciones.
class Rectangulo {
double ancho;
double altura;
Rectangulo(this.ancho, this.altura); // Constructor predeterminado
Rectangulo.conLongitud(this.ancho) {
altura = ancho * 2;
} // Constructor con nombre "conLongitud"
Rectangulo.conMedidas(this.ancho, this.altura); // Constructor con nombre "conMedidas"
}
void main() {
Rectangulo rectangulo1 = Rectangulo(5, 10);
print('Rectángulo 1: ancho ${rectangulo1.ancho}, altura ${rectangulo1.altura}');
Rectangulo rectangulo2 = Rectangulo.conLongitud(8);
print('Rectángulo 2: ancho ${rectangulo2.ancho}, altura ${rectangulo2.altura}');
Rectangulo rectangulo3 = Rectangulo.conMedidas(3, 6);
print('Rectángulo 3: ancho ${rectangulo3.ancho}, altura ${rectangulo3.altura}');
}
En este ejemplo, la clase Rectangulo
tiene tres constructores. El constructor predeterminado utiliza los parámetros ancho
y altura
para inicializar las propiedades correspondientes.
Los constructores con nombre son Rectangulo.conLongitud
y Rectangulo.conMedidas
. El constructor Rectangulo.conLongitud
toma solo el parámetro ancho
y automáticamente calcula la altura multiplicando el ancho por 2. El constructor Rectangulo.conMedidas
toma tanto ancho
como altura
y los asigna directamente a las propiedades correspondientes.
En la función main()
, se crean objetos rectangulo1
, rectangulo2
y rectangulo3
utilizando diferentes constructores. Cada uno muestra por consola el ancho y la altura correspondientes.
Los constructores con nombre son útiles cuando deseas proporcionar distintas formas de inicializar objetos o cuando deseas dar mayor claridad y flexibilidad a la creación de objetos en tu código.
Ejercicio de la Sesión:
void main() {
final Map<String, dynamic> rawJson = {
'name': 'TonyStark',
'power': 'Money',
'isAlive': false,
};
final iroman = Hero.fromJson( rawJson );
print( iroman );
}
class Hero {
String name;
String power;
bool isAlive;
Hero({
required this.name,
required this.power,
required this.isAlive
});
Hero.fromJson( Map<String,dynamic> json)
: name = json['name'] ?? 'No name found',
power = json['power'] ?? 'No power found',
isAlive = json['isAlive'] ?? 'No isAlive found';
@override
String toString() {
return '$name, $power, isAlive: ${ isAlive ? 'YES!' : 'Nope'}';
}
}