Paso por valor o por referencia en Kotlin: ¿por qué no puedo cambiar un número en una función?
¡Hola a todos! Acabo de empezar a aprender Kotlin después de Java y me he confundido con el mecanismo de paso de argumentos en funciones. Leí varios artículos, pero no lo entendí del todo.
Aquí hay un ejemplo simple. Escribo una función que debe incrementar el número pasado en 10:
```kotlin
fun increaseValue(x: Int) {
x = x + 10 // Error de compilación: Val cannot be reassigned
}
```
El compilador se queja de que x es val. Entiendo que los parámetros en Kotlin son referencias inmutables (val). Pero entonces, ¿cómo funciona el paso para objetos mutables? Aquí hay otro ejemplo:
```kotlin
data class Person(var name: String)
fun changeName(person: Person) {
person.name = "New Name" // Esto funciona
}
fun main() {
val p = Person("Old")
changeName(p)
println(p.name) // Imprime "New Name"
}
```
Aquí puedo cambiar el campo del objeto. ¿Significa esto que para los primitivos es paso por valor y para los objetos es paso por referencia? Pero si intento reemplazar el objeto mismo dentro de la función:
```kotlin
fun replacePerso