En Dart, const
y final
son dos modificadores de variables que permiten declarar valores inmutables, pero tienen diferencias importantes en cuanto a cuándo y cómo se asigna el valor. Entender cuándo usar cada uno es clave para aprovechar las optimizaciones y asegurar la inmutabilidad en el código.
const
y final
en Dart
Tanto const
como final
declaran variables que no se pueden modificar una vez inicializadas, pero cada uno tiene sus particularidades:
const
: Indica que el valor es constante en tiempo de compilación. Esto significa que el valor debe estar definido antes de la ejecución del programa y no puede depender de variables o cálculos en tiempo de ejecución. Las variables const
pueden ser declaradas en cualquier parte del código, ya que su valor es inmutable y fijo.
final
: Permite definir una variable que solo se asignará una vez, en tiempo de ejecución. Esto es útil cuando el valor se conoce solo al inicio de la ejecución, pero no en el momento de compilar. Una variable final
puede recibir su valor mediante una función, operación o entrada de usuario en el programa.
const
y final
en Dart
Aquí algunos ejemplos de cómo y cuándo usar cada uno:
void main() {
// Ejemplo de `const`
const pi = 3.1416; // Valor constante en tiempo de compilación
const listaConstante = [1, 2, 3]; // Lista constante, no se puede modificar
// Ejemplo de `final`
final fechaActual = DateTime.now(); // Valor asignado en tiempo de ejecución
final listaFinal = [1, 2, 3]; // Lista fija, pero el contenido puede cambiar
print(pi); // Output: 3.1416
print(fechaActual); // Output: Muestra la fecha actual en tiempo de ejecución
}
En este ejemplo, pi
es una constante cuyo valor es fijo en tiempo de compilación, mientras que fechaActual
obtiene su valor en tiempo de ejecución. Las listas con const
no pueden modificarse ni en contenido ni en tamaño, mientras que final
permite modificar los elementos internos de la lista, pero no reasignarla.
const
y final
?
const
cuando el valor es verdaderamente constante y conocido antes de ejecutar el programa, como valores numéricos o cadenas de texto fijas.
final
cuando el valor debe ser inmutable, pero solo se conocerá en tiempo de ejecución.
Para más detalles, consulta la documentación oficial de Dart.
Jorge García
Fullstack developer