¡Hola a todos! Acabo de empezar a aprender Kotlin, viniendo de Java, y me encontré con una situación que no entiendo. En Java estamos acostumbrados a trabajar con ArrayList, HashMap y llamar tranquilamente list.add(), map.put(), etc. Pero en Kotlin, cuando escribo:
```kotlin
val myList = listOf(1, 2, 3)
myList.add(4) // Error: Unresolved reference: add
val myMap = mapOf("a" to 1, "b" to 2)
myMap.put("c", 3) // Error: Unresolved reference: put
```
El compilador se queja de que esos métodos no existen. Probé usar mutableListOf y mutableMapOf — ahí add y put funcionan. Pero ¿por qué para los listOf y mapOf normales no están? ¿Es un bug del lenguaje? ¿O no entiendo algo de la filosofía de Kotlin?
Por favor, explíquenme cómo trabajar correctamente con colecciones en Kotlin si necesito tanto agregar elementos como solo leer datos. ¿Y qué significan exactamente estos "mutable" e "immutable"? ¡Gracias de antemano!
<<
>>
Respuesta corta: diferencia entre colecciones mutables e inmutables
En Kotlin, las colecciones se dividen en dos tipos: mutables e inmutables. Las inmutables (como listOf y mapOf) no permiten modificar su contenido después de creadas; por eso no tienen métodos como add, remove o put. Las mutables (como mutableListOf y mutableMapOf) sí los tienen. Esto no es un bug, sino una decisión de diseño para fomentar la inmutabilidad y evitar efectos secundarios no deseados.