Qu'est-ce qu'un «receiver» en Kotlin et pourquoi en a-t-on besoin ?
Bonjour, collègues ! Je viens de commencer à étudier Kotlin après Java et je suis tombé sur le terme « receiver ». Je lis la documentation et je vois des choses comme `apply`, `let`, `run`, `with` — et partout on parle de receivers. Mais je n'arrive pas à comprendre complètement ce que c'est et comment ça fonctionne.
Voici un exemple simple. J'écris ce code :
```kotlin
data class Person(var name: String = "", var age: Int = 0)
fun main() {
val person = Person().apply {
name = "Alice" // Ici, j'accède à name directement, sans person.name
age = 30
}
println(person)
}
```
Je comprends qu'à l'intérieur du bloc `apply`, je peux écrire `name = "Alice"` au lieu de `person.name = "Alice"`. Mais comment ça marche ? Que signifie « fonction avec receiver » ? Est-ce une sorte de closure magique ? Ou est-ce similaire à la façon dont `this` fonctionne en Java ?
J'ai l'impression de manquer un concept fondamental. Pouvez-vous m'expliquer simplement ce qu'est un receiver en Kotlin, en quoi il diffère d'un argument de fonction ordinaire, et où cela peut être utile ?