Menu
Coddy logo textTech

Construtor Padrão

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 10 de 110.

Quando você não define nenhum construtor em uma classe, o Dart fornece automaticamente um construtor padrão. Este é um construtor sem parâmetros que simplesmente cria uma instância da classe.

class Book {
  String title = 'Unknown';
  int pages = 0;
}

// O Dart fornece um construtor padrão: Book()
Book myBook = Book();
print(myBook.title); // Desconhecido

O construtor padrão é invisível no seu código, mas ele existe. Ele não recebe argumentos e inicializa o objeto com quaisquer valores padrão que você tenha atribuído às variáveis de instância.

Uma vez que você define seu próprio construtor, o construtor padrão não é mais fornecido automaticamente. Se você ainda quiser um construtor sem argumentos junto com um parametrizado, você deve criá-lo explicitamente:

class Book {
  String title;
  int pages;

  // Construtor padrão explícito
  Book() : title = 'Unknown', pages = 0;

  // Construtor parametrizado
  Book.withDetails(this.title, this.pages);
}

Book book1 = Book();                      // Usa o padrão
Book book2 = Book.withDetails('Dart', 300); // Usa o parametrizado

O construtor padrão explícito usa uma lista de inicialização (a parte após os dois pontos) para definir valores iniciais. Este padrão é útil quando você deseja oferecer várias maneiras de criar objetos a partir da mesma classe.

challenge icon

Desafio

Fácil

Vamos construir um sistema simples de inventário de produtos que demonstra construtores padrão implícitos e explícitos.

Você criará dois arquivos para organizar seu código:

  • product.dart: Defina uma classe Product que oferece duas maneiras de criar produtos:
    • Um construtor padrão explícito Product() que inicializa name como 'Unnamed' e price como 0.0 usando uma lista de inicialização
    • Um construtor nomeado Product.withDetails que aceita os parâmetros name e price
    • Um método display() que imprime: Product: [name] - $[price]
  • main.dart: Importe sua classe de produto e crie dois produtos:
    • Um usando o construtor padrão
    • Um usando o construtor nomeado com 'Laptop' e 999.99
    Chame display() em cada produto.

Sua classe Product deve ter duas variáveis de instância:

  • String name
  • double price

Formato de saída esperado:

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

Folha de consulta

Quando nenhum construtor é definido em uma classe, o Dart fornece automaticamente um construtor padrão sem parâmetros:

class Book {
  String title = 'Unknown';
  int pages = 0;
}

Book myBook = Book(); // Uses implicit default constructor
print(myBook.title); // Unknown

Assim que você define seu próprio construtor, o construtor padrão não é mais fornecido automaticamente. Para ter tanto um construtor sem argumentos quanto um parametrizado, você deve criá-los explicitamente:

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

O construtor padrão explícito usa uma lista de inicialização (após os dois pontos) para definir os valores iniciais.

Experimente você mesmo

import 'product.dart';

void main() {
  // TODO: Criar um produto usando o construtor padrão
  
  // TODO: Criar um produto usando o construtor nomeado com 'Laptop' e 999.99
  
  // TODO: Chamar display() em cada produto
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos