تخطَّ إلى المحتوى

دالة تمديد (extension)

دوال التمديد دالة تمديد (extension)

دالة التمديد تضيف سلوكًا جديدًا لنوع موجود (حتى من مكتبة قياسية) دون توريثه أو تعديل شيفرته المصدرية.

تُعرَّف دالة التمديد بكتابة اسم النوع المستهدف قبل اسم الدالة مفصولًا بنقطة. داخل جسم الدالة، تشير this إلى الكائن المستدعى عليه (receiver). هي حل ثابت زمن-ترجمة (لا تُعدّل الصنف الأصلي فعليًّا) وتُستدعى تمامًا كأي دالة عضو عادية.

الصياغة

fun النوع.اسمالدالة(معاملات): نوعالإرجاع {
    // this يشير للكائن المستدعى عليه
}

📄 مثال

fun String.isPalindrome(): Boolean {
    val cleaned = this.lowercase()
    return cleaned == cleaned.reversed()
}

fun Int.squared(): Int = this * this

println("level".isPalindrome())   // true
println(5.squared())              // 25

أهم النقاط

العنصرالوظيفة
fun النوع.الدالة()بناء الجملة الأساسي لتعريف دالة التمديد
thisيشير داخل الدالة إلى الكائن (receiver) المستدعاة عليه
خاصية تمديدval النوع.الخاصية: نوع get() = ... بنفس الفكرة للخصائص

💡 نصائح عملية

  • استخدمها لإضافة دوال مساعدة لأنواع من المكتبة القياسية بدل كتابة دوال منفصلة تأخذ الكائن كمعامل
  • دوال التمديد لا يمكنها الوصول لأعضاء private في الصنف الأصلي — فقط للأعضاء العامة

⚠️ أخطاء شائعة

  • توقّع أنها تُعدّل الصنف الأصلي فعليًّا — هي حل زمن-ترجمة فقط (syntactic sugar) وليست وراثة حقيقية
  • تعريف دالة تمديد بنفس اسم وتوقيع دالة عضو موجودة — دالة العضو تُستدعى دائمًا أولًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار KOTLIN الكامل بالعربي.