¿Cuál es la diferencia entre var y val en Kotlin? ¿Cuándo usar cada uno?
¡Hola! Acabo de empezar a aprender Kotlin después de Java y me confundí con la declaración de variables. En Java estoy acostumbrado a que las variables se declaren con tipo (int, String) y modificador (final para constantes). En Kotlin, en cambio, veo dos palabras clave: var y val.
Leí que val es el análogo de final en Java, y var es una variable mutable normal. Pero en la práctica me surgieron preguntas.
Por ejemplo, escribí este código:
```kotlin
fun main() {
var name = "Anna"
name = "María" // esto funciona, todo bien
val age = 25
age = 30 // ¡Error! Val cannot be reassigned
}
```
Con val está claro: no se puede reasignar. Pero ¿qué pasa si val almacena un objeto, no un primitivo? Por ejemplo:
```kotlin
val list = mutableListOf("a", "b")
list.add("c") // ¿esto funciona?
println(list) // mostrará [a, b, c]
```
¿Resulta que val no es una constante, sino solo una referencia que no se puede cambiar? ¿O estoy confundiendo algo?
También me interesa: ¿cuándo es mejor usar var y cuándo val? ¿Afecta esto al rendimiento?