Junior
¿En qué se diferencian las palabras clave final y const en Dart?
sobes.tech AI
Respuesta de la IA
final y const se utilizan para crear variables cuyos valores no se pueden cambiar después de la inicialización.
Diferencias principales:
-
Momento de inicialización:
finalse inicializa en tiempo de ejecución (runtime) en el primer acceso.constse inicializa en tiempo de compilación (compile-time).
-
Tipo de valores:
- La variable
finalpuede almacenar un valor que se calcula en tiempo de ejecución. - La variable
constdebe almacenar un valor que puede ser calculado en tiempo de compilación (literales, resultado de expresiones constantes).
- La variable
-
Constancia:
final: La variable es constante, pero el valor al que hace referencia (si es un objeto) puede ser modificable.const: La variable es constante, y el valor al que hace referencia también debe ser constante (inmutable).
Ejemplos:
// final - se inicializa en tiempo de ejecución
final DateTime now = DateTime.now(); // El valor solo se conoce en tiempo de ejecución
// const - se inicializa en tiempo de compilación
const double pi = 3.14; // El valor se conoce en tiempo de compilación
// Usar const en listas y mapas los hace inmutables
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // ¡Error! La lista es inmutable
// Usar final en listas y mapas hace que la variable sea inmutable,
// pero el contenido del objeto puede ser modificado (si el objeto es mutable)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Permitido, ya que la lista en sí es mutable
// final con valor constante
final int a = 5; // Es posible, pero `const` sería más apropiado
| Inicialización | Requisitos del valor | Mutabilidad del objeto (si referencia a un objeto) | |
|---|---|---|---|
final |
En tiempo de ejecución | Puede calcularse en tiempo de ejecución | Puede ser mutable si el objeto en sí lo es |
const |
En tiempo de compilación | Debe ser conocido en tiempo de compilación | Debe ser inmutable |