val y var se utilizan ambos para declarar variables, pero tienen diferencias fundamentales:
val number = 42 // number = 10 // ¡error!
var counter = 0 counter++ // permitido
Seguridad y rendimiento:
val donde la variable no deba cambiar — esto protege contra modificaciones accidentales y hace el código más fácil de entender.val permite al compilador y al IDE detectar errores en tiempo de compilación y optimizar el código.¿Puede un objeto declarado como
valser modificado?
Respuesta: El valor de la variable (la referencia) no puede ser reasignado, pero si es un objeto (por ejemplo, una lista), su estado interno se puede cambiar.
val list = mutableListOf(1,2) list.add(3) // ¡Se puede! Pero list = otraLista será un error.
Historia
En un proyecto de tienda en línea, un desarrollador definió la lista de productos como
val items = mutableListOf<Product>(), pensando que así la lista era completamente inmutable. En realidad, en otra parte, la lista se modificó (se añadió un nuevo elemento), lo que afectó inesperadamente la visualización del carrito.
Historia
En el analizador de grandes archivos de texto, el búfer de array se declaró como
var buffer, aunque durante el proceso de análisis no era necesario reemplazarlo. Por error, se produjo una reasignación accidental a un nuevo array, lo que causó una fuga de memoria y un procesamiento incorrecto de los datos.
Historia
En el código de un microservicio, la mayoría de las variables se declaraban como
var"por si acaso", lo que resultó en cambios en el estado del objeto en diferentes hilos en grandes expresiones, lo que llevó a errores difíciles de detectar debido a la condición de carrera.