Recientemente leí sobre la const
palabra clave, ¡y estoy tan confundido! No puedo encontrar ninguna diferencia entre const
y la val
palabra clave, quiero decir que podemos usar ambas para hacer una variable inmutable, ¿hay algo más que me falta?
276
Respuestas:
const
s son constantes de tiempo de compilación. Lo que significa que su valor debe asignarse durante el tiempo de compilación, a diferencia deval
s, donde se puede hacer en tiempo de ejecución.Esto significa que
const
s nunca puede asignarse a una función ni a ningún constructor de clases, sino solo a unaString
o primitiva.Por ejemplo:
fuente
const val foo = "Hello world"
yval bar = "Hello world"
? ¿Son lo mismo?const
valores estarán completamente alineados durante la compilación.const val
lugar de soloconst
? Me parece que laval
palabra clave es totalmente superflua en este contexto, yaconst var
que sería absurda en su aspecto.const val
,const
es un modificador enval
lugar de una palabra clave. Modificadores> palabras clave. Más ejemplos de este mismo diseño son,annotation/enum/data class
,private val
,inline fun
, etc.Solo para agregar a la respuesta de Luka:
Fuente: documentación oficial
fuente
Puedes transformar el Kotlin a Java. Entonces puedes ver que const tiene un modificador estático más que val . El código simple como este.
Kotlin:
A Java (porción):
fuente
const
se elimina, producirá un archivo Java diferente?Ambos
val
yconst
son inmutables.const
se usa para declarar constantes de tiempo de compilación, mientras queval
para constantes de tiempo de ejecución.fuente
const kotlin a Java
val kotlin a Java
En lenguaje sencillo
Ejemplo 1-
Esto se debe a que getCar () se evalúa en tiempo de ejecución y asigna el valor a Car.
Adicionalmente -
fuente
En kotlin,
const
yval
ambos representan la inmutabilidad y los valores de solo lectura y actúan comofinal
palabra clave en java.val
la palabra clave debe usarse para declarar valores de tiempo de ejecución yconst
palabra clave debe usarse para declarar valores de tiempo de compilación.Tenga en cuenta que const debe usarse solo con tipos de datos primitivos, no para funciones y constructores.
fuente