Li recentemente sobre a const
palavra - chave e estou muito confuso! Não consigo encontrar nenhuma diferença entre const
e a val
palavra - chave; quero dizer, podemos usar os dois para criar uma variável imutável. Existe alguma outra coisa que estou perdendo?
276
Respostas:
const
s são constantes de tempo de compilação. Significando que seu valor deve ser atribuído durante o tempo de compilação, diferente deval
s, onde isso pode ser feito em tempo de execução.Isso significa que esses
const
nunca podem ser atribuídos a uma função ou a qualquer construtor de classe, mas apenas aString
ou primitivo.Por exemplo:
fonte
const val foo = "Hello world"
eval bar = "Hello world"
? Eles são os mesmos?const
valores serão completamente incorporados durante a compilação.const val
vez de apenasconst
? Parece-me que aval
palavra-chave é totalmente supérflua nesse contexto, poisconst var
seria absurda.const val
,const
é um modificador emval
vez de uma palavra-chave. Modificadores> palavras-chave. Mais exemplos deste mesmo projeto são,annotation/enum/data class
,private val
,inline fun
, etc.Apenas para adicionar à resposta de Luka:
Fonte: documentação oficial
fonte
Você pode transformar o Kotlin em Java. Então você pode ver que const tem mais um modificador estático que val . O código simples como este.
Kotlin:
Para Java (parte):
fonte
const
for removido, ele produzirá um arquivo Java diferente?Ambos
val
econst
são imutáveis.const
é usado para declarar constantes em tempo de compilação, enquantoval
para constantes em tempo de execução.fonte
const kotlin para Java
val kotlin para Java
Em linguagem simples
Exemplo 1-
Isso ocorre porque getCar () é avaliado em tempo de execução e atribui o valor a Car.
Além disso -
fonte
No kotlin,
const
eval
ambos representam a imutabilidade e os valores somente leitura e agem comofinal
palavra-chave em java.val
A palavra-chave deve ser usada para declarar valores de tempo de execução e aconst
palavra - chave deve ser usada para declarar valores de tempo de compilação.Lembre-se de que const deve ser usado apenas com tipos de dados primitivos, não para funções e construtores.
fonte