Avatar ·

¿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?