Volver a la página principal
jueves 31 octubre 2024
7

Cómo usar Constructores Constantes (const constructors) en Dart

En Dart, los constructores constantes (const constructors) permiten crear instancias inmutables de una clase en tiempo de compilación. Al usar un constructor constante, el compilador puede optimizar el uso de memoria, ya que todas las instancias constantes con los mismos valores comparten el mismo espacio en lugar de crear múltiples instancias. Esto es particularmente útil en aplicaciones de Flutter, donde se definen muchos widgets inmutables.

¿Qué es un constructor constante en Dart?

Un constructor constante (const) es un constructor que permite crear una instancia de una clase que no puede cambiar (es inmutable) y que puede ser creada en tiempo de compilación. Para que una clase tenga un constructor constante, todas sus propiedades deben ser final (inmutables) y no deben depender de valores calculados en tiempo de ejecución.

Sintaxis básica de un constructor constante

Para declarar un constructor constante, utiliza la palabra clave const antes del nombre del constructor. Por convención, las clases con constructores constantes suelen tener propiedades final para asegurar la inmutabilidad.

class Punto {
  final int x;
  final int y;

  const Punto(this.x, this.y);
}

void main() {
  const punto1 = Punto(3, 5);
  const punto2 = Punto(3, 5);

  print(identical(punto1, punto2)); // Imprime: true
}

En este ejemplo, punto1 y punto2 son constantes con los mismos valores y, al ser inmutables, comparten el mismo espacio en memoria.

Ejemplos de uso de const constructors en Dart

Creación de instancias constantes

Con un constructor constante, puedes definir múltiples instancias de una clase con los mismos valores y estarán optimizadas para compartir memoria.

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

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

void main() {
  const color1 = Color(255, 0, 0);
  const color2 = Color(255, 0, 0);
  const color3 = Color(0, 255, 0);

  print(identical(color1, color2)); // Imprime: true
  print(identical(color1, color3)); // Imprime: false
}

En este ejemplo, color1 y color2 son la misma instancia, ya que tienen los mismos valores y fueron creados con un constructor constante.

Uso de const constructors en Flutter

En Flutter, los constructores constantes son comunes en widgets que no cambian, optimizando la construcción y reutilización de la interfaz de usuario.

import 'package:flutter/material.dart';

class MiWidget extends StatelessWidget {
  final String titulo;

  const MiWidget({required this.titulo, Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Text(titulo);
  }
}

void main() {
  runApp(
    const MaterialApp(
      home: Scaffold(
        body: Center(
          child: MiWidget(titulo: "Hola, Flutter!"),
        ),
      ),
    ),
  );
}

En este ejemplo, MiWidget tiene un constructor constante, lo que significa que titulo es inmutable. Al ser un const, el widget puede ser optimizado y reutilizado por el motor de Flutter.

Uso de listas y mapas constantes en constructores

Un constructor constante puede incluir listas y mapas constantes para crear objetos inmutables más complejos.

class Rectangulo {
  final int ancho;
  final int alto;
  final List<String> colores;

  const Rectangulo(this.ancho, this.alto, this.colores);
}

void main() {
  const rectangulo = Rectangulo(10, 20, ['rojo', 'verde']);
  print(rectangulo.colores); // Imprime: [rojo, verde]
}

En este caso, colores es una lista constante, lo que asegura que el Rectangulo y sus propiedades sean inmutables.

Ventajas de usar constructores constantes en Dart

  • Optimización de memoria: Instancias con los mismos valores comparten memoria.
  • Inmutabilidad: Los objetos creados con constructores constantes no pueden cambiar, lo cual es ideal para aplicaciones que requieren consistencia.
  • Rendimiento: En Flutter, permite optimizar y reducir el número de renderizaciones de widgets inmutables.

Reglas para usar const constructors

  • Todas las propiedades deben ser final.
  • No puedes inicializar propiedades en el cuerpo del constructor; deben ser inicializadas en el momento de la declaración o a través del constructor.

Referencia oficial

Para obtener más detalles sobre los constructores constantes, consulta la documentación oficial de Dart.

Etiquetas:
dart
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer