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.
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.
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.
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.
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.
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.
final
.
Para obtener más detalles sobre los constructores constantes, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer