Menu
Coddy logo textTech

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); // Unknown

El 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 parametrizado

El 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.

challenge icon

Desafío

Fácil

Vamos 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 clase Product que ofrezca dos formas de crear productos:
    • Un constructor predeterminado explícito Product() que inicialice name como 'Unnamed' y price como 0.0 usando una lista de inicialización
    • Un constructor nombrado Product.withDetails que acepte los parámetros name y price
    • Un método display() que imprima: Product: [name] - $[price]
  • main.dart: Importa tu clase de producto y crea dos productos:
    • Uno usando el constructor predeterminado
    • Uno usando el constructor nombrado con 'Laptop' y 999.99
    Llama a display() en cada producto.

Tu clase Product debe tener dos variables de instancia:

  • String name
  • double price

Formato de salida esperado:

Product: Unnamed - $0.0
Product: Laptop - $999.99

Hoja 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); // Unknown

Una 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 constructor

El 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
}
quiz iconPonte a prueba

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