Menu
Coddy logo textTech

Construtores Constantes

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

Um construtor constante cria objetos constantes em tempo de compilação. Quando você cria objetos com os mesmos valores usando um construtor const, o Dart reutiliza a mesma instância na memória, melhorando o desempenho.

Para criar um construtor constante, adicione a palavra-chave const antes do nome do construtor e garanta que todas as variáveis de instância sejam final:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Tanto white quanto alsoWhite apontam para o exato mesmo objeto na memória porque foram criados com valores idênticos usando um construtor const.

Você também pode usar construtores const sem a palavra-chave const, o que cria instâncias regulares (não constantes):

var red = Color(255, 0, 0);       // Instância regular
const blue = Color(0, 0, 255);    // Instância constante

Construtores constantes são comumente usados para objetos de configuração imutáveis, valores predefinidos como cores ou tamanhos, e em qualquer lugar onde você queira garantir a imutabilidade do objeto enquanto otimiza o uso de memória.

challenge icon

Desafio

Fácil

Vamos construir um sistema de configuração para um jogo simples que utiliza construtores constantes para definir configurações imutáveis e reutilizáveis.

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

  • difficulty.dart: Defina uma classe Difficulty que representa as configurações de dificuldade do jogo. Sua classe deve ter:
    • Três campos final: name (String), enemyCount (int) e playerLives (int)
    • Um construtor constante que inicializa todos os três campos
    • Um método display() que imprime as informações de dificuldade
  • main.dart: Importe sua classe de dificuldade e crie três predefinições de dificuldade constantes:
    • easy com name 'Easy', 5 enemies e 5 lives
    • medium com name 'Medium', 10 enemies e 3 lives
    • hard com name 'Hard', 20 enemies e 1 life
    Crie todos os três como constantes de tempo de compilação usando a palavra-chave const. Em seguida, chame display() em cada um na ordem listada acima. Por fim, verifique se dois objetos const Difficulty('Easy', 5, 5) são idênticos usando identical() e imprima o resultado.

O método display() deve imprimir exatamente neste formato:

[name]: [enemyCount] enemies, [playerLives] lives

Saída esperada:

Easy: 5 enemies, 5 lives
Medium: 10 enemies, 3 lives
Hard: 20 enemies, 1 lives
true

Folha de consulta

Um construtor constante cria objetos constantes em tempo de compilação. Quando objetos com valores idênticos são criados usando um construtor const, o Dart reutiliza a mesma instância na memória.

Para criar um construtor constante, adicione a palavra-chave const antes do nome do construtor e garanta que todas as variáveis de instância sejam final:

class Color {
  final int red;
  final int green;
  final int blue;

  const Color(this.red, this.green, this.blue);
}

Criar instâncias constantes com valores idênticos resulta no mesmo objeto na memória:

const white = Color(255, 255, 255);
const alsoWhite = Color(255, 255, 255);

print(identical(white, alsoWhite)); // true

Construtores const também podem ser usados sem a palavra-chave const para criar instâncias regulares:

var red = Color(255, 0, 0);       // Instância regular
const blue = Color(0, 0, 255);    // Instância constante

Construtores constantes são úteis para objetos de configuração imutáveis, valores predefinidos e para otimizar o uso de memória.

Experimente você mesmo

import 'difficulty.dart';

void main() {
  // TODO: Crie três predefinições de dificuldade constantes usando a palavra-chave const:
  // - easy: name 'Easy', 5 enemies, 5 lives
  // - medium: name 'Medium', 10 enemies, 3 lives
  // - hard: name 'Hard', 20 enemies, 1 life
  
  // TODO: Chame display() em cada dificuldade na ordem: easy, medium, hard
  
  // TODO: Verifique se dois objetos const Difficulty('Easy', 5, 5) são idênticos
  // usando identical() e imprima o resultado
}
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