Constructor por defecto
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 10 de 110.
Cuando no defines ningún constructor en una clase, Dart proporciona automáticamente un constructor predeterminado. Este es un constructor sin parámetros que simplemente crea una instancia de la clase.
class Book {
String title = 'Unknown';
int pages = 0;
}
// Dart proporciona un constructor predeterminado: Book()
Book myBook = Book();
print(myBook.title); // UnknownEl constructor predeterminado es invisible en su código, pero existe. No recibe argumentos e inicializa el objeto con cualquier valor predeterminado que haya asignado a las variables de instancia.
Una vez que defines tu propio constructor, el constructor predeterminado ya no se proporciona automáticamente. Si aún deseas un constructor sin argumentos junto con uno parametrizado, debes crearlo explícitamente:
class Book {
String title;
int pages;
// Constructor por defecto explícito
Book() : title = 'Unknown', pages = 0;
// Constructor parametrizado
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Usa el valor por defecto
Book book2 = Book.withDetails('Dart', 300); // Usa el parametrizadoEl constructor por defecto explícito utiliza una lista de inicialización (la parte después de los dos puntos) para establecer valores iniciales. Este patrón es útil cuando se desea ofrecer múltiples formas de crear objetos a partir de la misma clase.
Desafío
FácilVamos a construir un sistema de inventario de productos sencillo que demuestre tanto los constructores predeterminados implícitos como los explícitos.
Crearás dos archivos para organizar tu código:
product.dart: Define una claseProductque ofrezca dos formas de crear productos:- Un constructor predeterminado explícito
Product()que inicialicenamecomo'Unnamed'ypricecomo0.0usando una lista de inicialización - Un constructor nombrado
Product.withDetailsque acepte los parámetrosnameyprice - Un método
display()que imprima:Product: [name] - $[price]
- Un constructor predeterminado explícito
main.dart: Importa tu clase de producto y crea dos productos:- Uno usando el constructor predeterminado
- Uno usando el constructor nombrado con
'Laptop'y999.99
display()en cada producto.
Tu clase Product debe tener dos variables de instancia:
String namedouble price
Formato de salida esperado:
Product: Unnamed - $0.0
Product: Laptop - $999.99Hoja de referencia
Cuando no se define un constructor en una clase, Dart proporciona automáticamente un constructor predeterminado sin parámetros:
class Book {
String title = 'Unknown';
int pages = 0;
}
Book myBook = Book(); // Uses implicit default constructor
print(myBook.title); // UnknownUna vez que defines tu propio constructor, el constructor predeterminado ya no se proporciona automáticamente. Para tener tanto un constructor sin argumentos como uno parametrizado, debes crearlos explícitamente:
class Book {
String title;
int pages;
// Explicit default constructor with initializer list
Book() : title = 'Unknown', pages = 0;
// Named constructor
Book.withDetails(this.title, this.pages);
}
Book book1 = Book(); // Uses default
Book book2 = Book.withDetails('Dart', 300); // Uses named constructorEl constructor predeterminado explícito utiliza una lista de inicialización (después de los dos puntos) para establecer los valores iniciales.
Pruébalo tú mismo
import 'product.dart';
void main() {
// TODO: Crear un producto usando el constructor por defecto
// TODO: Crear un producto usando el constructor nombrado con 'Laptop' y 999.99
// TODO: Llamar a display() en cada producto
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO
Archivos externosLibrerías e importacionesIntroducción a la POOClases vs. ObjetosLa palabra clave thisMétodosVariables de instanciaConceptos básicos de constructoresResumen - Calculadora sencilla4Seguridad de nulos
Introducción a la seguridad de nulosNulables vs No nulablesLos operadores ? y !Palabra clave Late y Null SafetyOperadores Null-awareNull Safety en clasesResumen - Sistema de perfil de usuario7Clases abstractas e interfaces
Clases abstractasMétodos abstractosInterfaces en DartInterfaces implícitasImplementar vs. ExtenderInterfaces múltiplesRepaso - Calculadora de figuras10Colecciones y Genéricos
Visión general de List, Set y MapColecciones con seguridad de tiposClases genéricasMétodos genéricosRestricciones genéricasIterable e IteratorResumen - Almacenamiento genérico2Constructores en Dart
Constructor por defectoConstructores nombradosListas de inicializaciónConstructores constantesConstructores de fábricaConstructores de redireccionamientoResumen - Constructor de formas5Encapsulamiento
Miembros públicos vs. privadosLa convención del prefijo _Privacidad a nivel de libreríaProfundidad en Getters y SettersOcultamiento de informaciónResumen - Registros de estudiantes8Mixins
Introducción a los MixinsCreación de MixinsUso de múltiples MixinsPalabra clave on en MixinsMixin vs HerenciaMixin vs InterfazResumen - Sistema Animal11Métodos especiales
Sobrescritura de toString()Sobrescritura de hashCode y ==Interfaz ComparableMétodo call()Sobrescritura de noSuchMethodResumen - Colección personalizada14Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy3Propiedades de clase
Miembros de instancia vs. estáticosCampos Final y ConstVariables LateMétodos y campos estáticosGetters y SettersResumen - Gestor de cuentas bancarias6Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosLa anotación @overrideLa palabra clave final en clasesConstructores y herenciaResumen - Jerarquía de empleados9Polimorfismo
Fundamentos del polimorfismoPolimorfismo mediante interfacesComprobación de tipos en tiempo de ejecuciónLos operadores is y asPalabra clave covariantResumen - Procesador de pagos12POO Asíncrona
Futures y async/awaitFundamentos de StreamsStream ControllersConstructores asíncronosAsincronía en métodos de claseRepaso - Data Fetcher15Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository