Avatar ·

O que é um "receiver" (receptor) em Kotlin e para que ele serve?

Olá, colegas! Comecei a estudar Kotlin depois de Java e me deparei com o termo "receiver" (receptor). Leio a documentação e vejo coisas como `apply`, `let`, `run`, `with` — e em todos os lugares falam sobre receivers. Mas não consigo entender completamente o que é isso e como funciona. Aqui está um exemplo simples. Escrevo este código: ```kotlin data class Person(var name: String = "", var age: Int = 0) fun main() { val person = Person().apply { name = "Alice" // Aqui acesso name diretamente, sem person.name age = 30 } println(person) } ``` Entendo que dentro do bloco `apply` posso escrever `name = "Alice"`, em vez de `person.name = "Alice"`. Mas como isso funciona? O que significa "função com receiver"? É algum tipo de closure mágico? Ou é parecido com como `this` funciona em Java? Parece que estou perdendo algum conceito fundamental. Vocês podem explicar de forma simples o que é um receiver em Kotlin, como ele difere de um argumento comum de função, e onde isso pode