ProgramaciónDesarrollador Backend

¿Cuál es la diferencia entre las palabras clave "val" y "var" en Kotlin? ¿Cómo utilizarlas de manera óptima en términos de seguridad y rendimiento del código?

Supere entrevistas con el asistente de IA Hintsage

Respuesta.

val y var se utilizan ambos para declarar variables, pero tienen diferencias fundamentales:

  • val (valor): declara una referencia inmutable, de solo lectura. Después de la inicialización, el valor no se puede reasignar, la referencia permanece siempre a un objeto:
val number = 42 // number = 10 // ¡error!
  • var (variable): declara una variable mutable;
var counter = 0 counter++ // permitido

Seguridad y rendimiento:

  • Se prefiere utilizar val donde la variable no deba cambiar — esto protege contra modificaciones accidentales y hace el código más fácil de entender.
  • El uso de val permite al compilador y al IDE detectar errores en tiempo de compilación y optimizar el código.

Pregunta capciosa.

¿Puede un objeto declarado como val ser 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.

Ejemplos de errores reales por desconocer los matices del tema.


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.