Passagem por valor ou por referência em Kotlin: por que não consigo alterar um número dentro de uma função?
Olá a todos! Comecei a estudar Kotlin depois de Java e fiquei confuso com o mecanismo de passagem de argumentos para funções. Li vários artigos, mas não entendi completamente.
Aqui está um exemplo simples. Escrevo uma função que deve aumentar o número passado em 10:
```kotlin
fun increaseValue(x: Int) {
x = x + 10 // Erro de compilação: Val cannot be reassigned
}
```
O compilador reclama que x é um val. Entendo que em Kotlin os parâmetros são referências imutáveis (val). Mas como funciona a passagem para objetos mutáveis? Aqui está outro exemplo:
```kotlin
data class Person(var name: String)
fun changeName(person: Person) {
person.name = "New Name" // Isso funciona
}
fun main() {
val p = Person("Old")
changeName(p)
println(p.name) // Imprime "New Name"
}
```
Aqui consigo alterar o campo do objeto. Isso significa que para tipos primitivos a passagem é por valor, e para objetos é por referência? Mas se eu tentar substituir o próprio objeto dentro da função:
```kotlin
fun replacePerso