Menu
Coddy logo textTech

Construtores Nomeados

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

Construtores nomeados permitem que você crie múltiplos construtores para uma classe, cada um com um nome descritivo que esclarece seu propósito. Isso é especialmente útil quando você precisa de diferentes maneiras de inicializar um objeto.

A sintaxe usa o nome da classe seguido por um ponto e o nome do construtor:

class Point {
  int x;
  int y;

  // Construtor regular
  Point(this.x, this.y);

  // Construtor nomeado para o ponto de origem
  Point.origin() : x = 0, y = 0;

  // Construtor nomeado a partir de um único valor
  Point.diagonal(int value) : x = value, y = value;
}

Cada construtor nomeado fornece uma maneira clara e legível de criar objetos:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

Construtores nomeados tornam seu código mais expressivo. Em vez de adivinhar o que Point(0, 0) significa, Point.origin() comunica imediatamente a intenção. Este padrão é comum em bibliotecas Dart e ajuda a criar código autodocumentado.

challenge icon

Desafio

Fácil

Vamos construir um conversor de temperatura que demonstra o poder dos construtores nomeados. Você criará uma classe Temperature que pode ser inicializada de diferentes maneiras, dependendo da unidade com a qual você está começando.

Você organizará seu código em dois arquivos:

  • temperature.dart: Defina uma classe Temperature com uma variável de instância double celsius. Sua classe deve fornecer três maneiras de criar uma temperatura:
    • Um construtor regular Temperature(this.celsius) que recebe um valor em Celsius diretamente
    • Um construtor nomeado Temperature.fromFahrenheit que aceita um valor em Fahrenheit e o converte para Celsius usando a fórmula: (fahrenheit - 32) * 5 / 9
    • Um construtor nomeado Temperature.freezing() que cria uma temperatura no ponto de congelamento (0 graus Celsius)
    Adicione um método display() que imprime: '${celsius}C'
  • main.dart: Importe sua classe de temperatura e crie três objetos de temperatura:
    • Um usando o construtor regular com 25.0
    • Um usando fromFahrenheit com 98.6
    • Um usando freezing()
    Chame display() em cada temperatura na ordem listada acima.

Formato de saída esperado:

25.0C
37.0C
0.0C

Folha de consulta

Construtores nomeados permitem que você crie múltiplos construtores para uma classe com nomes descritivos que esclarecem seu propósito.

A sintaxe usa o nome da classe seguido por um ponto e o nome do construtor:

class Point {
  int x;
  int y;

  // Construtor regular
  Point(this.x, this.y);

  // Construtor nomeado para o ponto de origem
  Point.origin() : x = 0, y = 0;

  // Construtor nomeado a partir de um único valor
  Point.diagonal(int value) : x = value, y = value;
}

Usando construtores nomeados:

Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);

print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)

Construtores nomeados tornam o código mais expressivo e autodocumentado ao comunicar claramente a intenção.

Experimente você mesmo

import 'temperature.dart';

void main() {
  // TODO: Crie uma Temperature usando o construtor regular com 25.0
  
  // TODO: Crie uma Temperature usando fromFahrenheit com 98.6
  
  // TODO: Crie uma Temperature usando freezing()
  
  // TODO: Chame display() em cada temperatura em ordem
}
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