Avatar ·

Was ist ein „receiver“ in Kotlin und wozu braucht man ihn?

Hallo Kollegen! Ich habe gerade angefangen, Kotlin nach Java zu lernen, und bin auf den Begriff „receiver“ gestoßen. Ich lese die Dokumentation und sehe Dinge wie `apply`, `let`, `run`, `with` – und überall wird über receiver geschrieben. Aber ich kann nicht ganz verstehen, was das ist und wie es funktioniert. Hier ist ein einfaches Beispiel. Ich schreibe diesen Code: ```kotlin data class Person(var name: String = "", var age: Int = 0) fun main() { val person = Person().apply { name = "Alice" // Hier greife ich direkt auf name zu, ohne person.name age = 30 } println(person) } ``` Ich verstehe, dass ich innerhalb des `apply`-Blocks `name = "Alice"` schreiben kann, statt `person.name = "Alice"`. Aber wie funktioniert das? Was bedeutet „Funktion mit receiver“? Ist das eine Art magisches Closure? Oder ähnelt es der Funktionsweise von `this` in Java? Mir scheint, ich übersehe ein grundlegendes Konzept. Könnt ihr mir einfach erklären, was ein receiver in Kotlin ist, wie er sich von einem normalen Funktionsargument unterscheidet und wo das nützlich ist?