ما هو "المستقبل" (receiver) في Kotlin ولماذا هو مطلوب؟
مرحبًا أيها الزملاء! لقد بدأت للتو في تعلم Kotlin بعد Java وصادفت مصطلح "receiver" (مستقبل). أقرأ الوثائق وأرى أشياء مثل `apply` و `let` و `run` و `with` — وفي كل مكان يُكتب عن المستقبلات. لكنني لا أستطيع فهم ما هو بالضبط وكيف يعمل.
إليك مثال بسيط. أكتب هذا الكود:
```kotlin
data class Person(var name: String = "", var age: Int = 0)
fun main() {
val person = Person().apply {
name = "Alice" // هنا أصل إلى name مباشرة، بدون person.name
age = 30
}
println(person)
}
```
أفهم أنه داخل كتلة `apply` يمكنني كتابة `name = "Alice"` بدلاً من `person.name = "Alice"`. لكن كيف يعمل هذا؟ ما معنى "دالة مع مستقبل"؟ هل هو إغلاق سحري؟ أم أنه يشبه كيفية عمل `this` في Java؟
أشعر أنني أفتقد مفهومًا أساسيًا. هل يمكنكم الشرح ببساطة ما هو receiver في Kotlin، وكيف يختلف عن الوسيط العادي للدالة، وأين يمكن أن يكون مفيدًا؟