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

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

Pratique por conta própria: Compilador de Dart online