توفر Kotlin ميزة قوية، وهي companion object
، لتوفير نهج منظم لإدارة وظائف مستوى الصنف. هذا يتناقض مع طرق static
في Java، حيث يوفر كلا النهجين مزايا و اعتبارات للمطورين.
محتويات
- طرق Java الثابتة (static)
- كائنات Kotlin المصاحبة (companion object)
- متى نستخدم كائنات Kotlin المصاحبة
- متى نتجنب استخدام كائنات Kotlin المصاحبة
طرق Java الثابتة (static)
في Java، تنتمي الطرق static
إلى الصنف نفسه، وليس إلى مثيلات الصنف. يتم الوصول إليها مباشرة باستخدام اسم الصنف:
public class MyClass {
public static int add(int a, int b) {
return a + b;
}
}
// الاستخدام:
int sum = MyClass.add(5, 3);
على الرغم من فائدتها في دوال المرافق وطرق المصنع، إلا أن طرق static
في Java لها قيود. لا يمكنها الوصول مباشرة إلى متغيرات أو طرق المثيل، وقد يؤدي الإفراط في استخدامها إلى تصاميم أقل توجهاً للكائنات.
كائنات Kotlin المصاحبة (companion object)
يوفر companion object
في Kotlin بديلاً أنيقاً. يتم إعلانه داخل صنف، ويعمل كحاوية للدووال والخصائص المرتبطة بالصنف، وليس بمثيلات محددة. الوصول إليه مشابه لأعضاء static
في Java:
class MyClass {
companion object {
fun add(a: Int, b: Int): Int {
return a + b
}
val PI = 3.14159
}
}
// الاستخدام:
val sum = MyClass.add(5, 3)
val piValue = MyClass.PI
يسمح companion object
في Kotlin بالدووال والخصائص (بما في ذلك القابلة للتغيير)، ويمكنه حتى تنفيذ واجهات. للحصول على قابلية قراءة أفضل في المشاريع الكبيرة، يمكنك تسمية الكائن المصاحب:
class MyClass {
companion object MyCompanionObject {
fun add(a: Int, b: Int): Int = a + b
}
}
// الاستخدام:
val sum = MyClass.MyCompanionObject.add(5, 3)
متى نستخدم كائنات Kotlin المصاحبة
كائنات companion object
قوية ولكن يجب استخدامها بحكمة. تشمل السيناريوهات المثالية:
- طرق المصنع: إنشاء مثيلات بتكوينات محددة.
- دووال المرافق: توفير دوال مساعدة مرتبطة بالصنف.
- الثوابت: تعريف الثوابت المرتبطة بالصنف.
- تنفيذ النمط المفرد (singleton) (بحذر): يمكن أن ينشئ
companion object
خاص مثيلاً واحداً، على الرغم من أن إعلانobject
في Kotlin يُفضل عمومًا للأنماط المفردة. - تنفيذ الواجهات: السماح للصنف بتنفيذ واجهة من خلال الكائن المصاحب.
متى نتجنب استخدام كائنات Kotlin المصاحبة
يمكن أن يؤدي الإفراط في الاستخدام إلى مشاكل في التصميم. تجنب كائنات companion object
عندما:
- الإفراط في الاستخدام: إذا كانت معظم وظائف الصنف موجودة في
companion object
، فراجع تصميم الصنف. قد تكون مجموعة دوال أبسط كافية. - الغموض في النطاق: يمكن أن يؤدي الاستخدام المفرط إلى طمس الخطوط الفاصلة بين دوال المثيل ودوال مستوى الصنف، مما يقلل من وضوح التعليمات البرمجية.
يوفر companion object
في Kotlin طريقة أنظف وأكثر تنظيماً لإدارة وظائف مستوى الصنف من طرق static
في Java. ومع ذلك، فإن التطبيق المدروس يضمن تعليمات برمجية نظيفة وقابلة للقراءة.