Sobes.tech
Junior

Qual é a diferença entre as palavras-chave final e const em Dart?

sobes.tech IA

Resposta da IA

final e const são utilizados para criar variáveis cujos valores não podem ser alterados após a inicialização.

Principais diferenças:

  • Momento de inicialização:

    • final é inicializado em tempo de execução (runtime) na primeira vez que é acessado.
    • const é inicializado em tempo de compilação (compile-time).
  • Tipo de valores:

    • A variável final pode armazenar um valor que é calculado em tempo de execução.
    • A variável const deve armazenar um valor que pode ser calculado em tempo de compilação (literais, resultado de expressões constantes).
  • Constância:

    • final: A variável é constante, mas o valor ao qual ela se refere (se for um objeto) pode ser modificável.
    • const: A variável é constante, e o valor ao qual ela se refere também deve ser constante (imutável).

Exemplos:

// final - inicializa em tempo de execução
final DateTime now = DateTime.now(); // O valor só é conhecido em tempo de execução

// const - inicializa em tempo de compilação
const double pi = 3.14; // O valor é conhecido na fase de compilação

// Usar const para listas e mapas os torna imutáveis
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // Erro! Lista imutável

// Usar final para listas e mapas torna a variável imutável,
// mas o conteúdo do objeto pode ser alterado (se o objeto for mutável)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // Permitido, pois a lista é mutável

// final com valor constante
final int a = 5; // Pode, mas `const` é mais adequado
Inicialização Requisitos do valor Mutabilidade do objeto (se referencia a um objeto)
final Em tempo de execução Pode ser calculado em tempo de execução Pode ser mutável se o objeto for mutável
const Em tempo de compilação Deve ser conhecido em tempo de compilação Deve ser imutável