Sobes.tech
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:

    • final se inicializa en tiempo de ejecución (runtime) en el primer acceso.
    • const se inicializa en tiempo de compilación (compile-time).
  • Tipo de valores:

    • La variable final puede almacenar un valor que se calcula en tiempo de ejecución.
    • La variable const debe almacenar un valor que puede ser calculado en tiempo de compilación (literales, resultado de expresiones constantes).
  • 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