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
finalpode armazenar um valor que é calculado em tempo de execução. - A variável
constdeve armazenar um valor que pode ser calculado em tempo de compilação (literais, resultado de expressões constantes).
- A variável
-
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 |