تكرار السؤال: …
الإجابة المختصرة
تُترجم كـ Static Methods في الـ Bytecode تستقبل الكائن الممتد (Receiver) كأول معامل، ولا تعدل الكلاس الأصلي.
الشرح
تتيح Extension Functions إضافة وظائف للكلاسات الموجودة (حتى لو كانت من مكتبات خارجية) دون وراثة. يتم حل استدعاء دوال الامتداد بشكل ثابت (Statically resolved) في وقت الترجمة اعتمادًا على النوع المعلن للمتغير، وليس ديناميكيًا وقت التشغيل (Dynamic Dispatch) كما في الدوال العادية.
مثال بالكود
fun View.visible() {
this.visibility = View.VISIBLE
}
// في الـ Java Bytecode تُترجم إلى:
// public static final void visible(View receiver) {
// receiver.setVisibility(View.VISIBLE);
// }أخطاء شائعة
- الاعتقاد بأن دوال الامتداد يمكنها الوصول إلى الحقول الخاصة (private members) في الكلاس الأصلي.
- توقع عمل الـ Polymorphism مع Extension Functions إذا كان لكلاس وابنه دالة امتداد بنفس الاسم.