Menu
Coddy logo textTech

Constructores constantes

Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 13 de 110.

Un constructor constante crea objetos constantes en tiempo de compilación. Cuando creas objetos con los mismos valores usando un constructor const, Dart reutiliza la misma instancia en memoria, mejorando el rendimiento.

Para crear un constructor constante, añade la palabra clave const antes del nombre del constructor y asegúrate de que todas las variables de instancia sean 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 como alsoWhite apuntan exactamente al mismo objeto en memoria porque fueron creados con valores idénticos usando un constructor const.

También puedes usar constructores const sin la palabra clave const, lo que crea instancias regulares (no constantes):

var red = Color(255, 0, 0);       // Instancia regular
const blue = Color(0, 0, 255);    // Instancia constante

Los constructores constantes se utilizan comúnmente para objetos de configuración inmutables, valores predefinidos como colores o tamaños, y en cualquier lugar donde se desee garantizar la inmutabilidad de los objetos mientras se optimiza el uso de la memoria.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de configuración para un juego sencillo que utiliza constructores constantes para definir ajustes inmutables y reutilizables.

Crearás dos archivos para organizar tu código:

  • difficulty.dart: Define una clase Difficulty que represente los ajustes de dificultad del juego. Tu clase debe tener:
    • Tres campos final: name (String), enemyCount (int), y playerLives (int)
    • Un constructor constante que inicialice los tres campos
    • Un método display() que imprima la información de la dificultad
  • main.dart: Importa tu clase de dificultad y crea tres ajustes preestablecidos de dificultad constantes:
    • easy con name 'Easy', 5 enemigos, y 5 vidas
    • medium con name 'Medium', 10 enemigos, y 3 vidas
    • hard con name 'Hard', 20 enemigos, y 1 vida
    Crea los tres como constantes en tiempo de compilación usando la palabra clave const. Luego llama a display() en cada uno en el orden listado anteriormente. Finalmente, verifica si dos objetos const Difficulty('Easy', 5, 5) son idénticos usando identical() e imprime el resultado.

El método display() debe imprimir en este formato exacto:

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

Salida esperada:

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

Hoja de referencia

Un constructor constante crea objetos constantes en tiempo de compilación. Cuando se crean objetos con valores idénticos utilizando un constructor const, Dart reutiliza la misma instancia en memoria.

Para crear un constructor constante, añade la palabra clave const antes del nombre del constructor y asegúrate de que todas las variables de instancia sean final:

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

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

Crear instancias constantes con valores idénticos da como resultado el mismo objeto en memoria:

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

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

Los constructores const también se pueden utilizar sin la palabra clave const para crear instancias regulares:

var red = Color(255, 0, 0);       // Instancia regular
const blue = Color(0, 0, 255);    // Instancia constante

Los constructores constantes son útiles para objetos de configuración inmutables, valores predefinidos y para optimizar el uso de la memoria.

Pruébalo tú mismo

import 'difficulty.dart';

void main() {
  // TODO: Crea tres ajustes preestablecidos de dificultad constantes usando la palabra clave const:
  // - easy: nombre 'Easy', 5 enemigos, 5 vidas
  // - medium: nombre 'Medium', 10 enemigos, 3 vidas
  // - hard: nombre 'Hard', 20 enemigos, 1 vida
  
  // TODO: Llama a display() en cada dificultad en orden: easy, medium, hard
  
  // TODO: Comprueba si dos objetos const Difficulty('Easy', 5, 5) son idénticos
  // usando identical() e imprime el resultado
}
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