Recientemente leí sobre la constpalabra clave, ¡y estoy tan confundido! No puedo encontrar ninguna diferencia entre consty la valpalabra clave, quiero decir que podemos usar ambas para hacer una variable inmutable, ¿hay algo más que me falta?
276

Respuestas:
consts son constantes de tiempo de compilación. Lo que significa que su valor debe asignarse durante el tiempo de compilación, a diferencia devals, donde se puede hacer en tiempo de ejecución.Esto significa que
consts nunca puede asignarse a una función ni a ningún constructor de clases, sino solo a unaStringo primitiva.Por ejemplo:
fuente
const val foo = "Hello world"yval bar = "Hello world"? ¿Son lo mismo?constvalores estarán completamente alineados durante la compilación.const vallugar de soloconst? Me parece que lavalpalabra clave es totalmente superflua en este contexto, yaconst varque sería absurda en su aspecto.const val,constes un modificador envallugar 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
constse elimina, producirá un archivo Java diferente?Ambos
valyconstson inmutables.constse usa para declarar constantes de tiempo de compilación, mientras quevalpara 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,
constyvalambos representan la inmutabilidad y los valores de solo lectura y actúan comofinalpalabra clave en java.valla palabra clave debe usarse para declarar valores de tiempo de ejecución yconstpalabra 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