¿Qué es un 'receiver' en Kotlin y para qué sirve?
¡Hola, colegas! Acabo de empezar a aprender Kotlin después de Java y me topé con el término 'receiver'. Leo la documentación y veo cosas como `apply`, `let`, `run`, `with`, y en todas partes hablan de receivers. Pero no puedo entender completamente qué es y cómo funciona.
Aquí hay un ejemplo simple. Escribo este código:
```kotlin
data class Person(var name: String = "", var age: Int = 0)
fun main() {
val person = Person().apply {
name = "Alice" // Aquí accedo a name directamente, sin person.name
age = 30
}
println(person)
}
```
Entiendo que dentro del bloque `apply` puedo escribir `name = "Alice"`, en lugar de `person.name = "Alice"`. Pero, ¿cómo funciona esto? ¿Qué significa 'función con receiver'? ¿Es una especie de closure mágico? ¿O es similar a cómo funciona `this` en Java?
Siento que me estoy perdiendo algún concepto fundamental. ¿Pueden explicarme de manera sencilla qué es un receiver en Kotlin, en qué se diferencia de un argumento normal de función y dónde se puede usar?