data class
أصناف البيانات data class
data class تولّد تلقائيًّا equals و hashCode و toString و copy لأي صنف يحمل بيانات فقط.
عند وضع data قبل class، يولّد المترجم دوالًا قياسية بناءً على خصائص الباني الأساسي: equals/hashCode للمقارنة حسب القيمة لا المرجع، toString لعرض مقروء، copy() لإنشاء نسخة معدَّلة جزئيًّا، ودوال componentN() التي تُفعّل التفكيك (destructuring).
تُستخدم لتمثيل بيانات بسيطة: نموذج مستخدم، استجابة API، حالة واجهة.
الصياغة
data class الاسم(val خاصية1: نوع, var خاصية2: نوع)
📄 مثال
data class User(val name: String, val age: Int)
val u1 = User("سارة", 22)
val u2 = User("سارة", 22)
println(u1 == u2) // true — مقارنة بالقيمة لا بالمرجع
println(u1) // User(name=سارة, age=22)
val older = u1.copy(age = 23) // نسخة معدَّلة جزئيًّا
val (name, age) = u1 // تفكيك (destructuring)أهم النقاط
| العنصر | الوظيفة |
|---|---|
| equals/hashCode | مقارنة تلقائية حسب قيم كل الخصائص |
| toString | تمثيل نصي مقروء يعرض اسم الصنف وكل الخصائص |
| copy() | ينشئ نسخة جديدة مع تعديل خصائص مختارة فقط |
| componentN() | تُفعّل التفكيك: val (a, b) = instance |
💡 نصائح عملية
- الباني الأساسي يجب أن يحوي معاملًا واحدًا على الأقل، وكلها val أو var
- استخدم copy() بدل تعديل الكائن مباشرة عند العمل بأسلوب غير قابل للتغيير (immutable)
⚠️ أخطاء شائعة
- توقّع أن == تقارن بالمرجع كما في class عادي — في data class تقارن بالقيمة دائمًا
- إضافة خصائص خارج الباني الأساسي وتوقّع دخولها في equals/copy — لا تُحسب إلا خصائص الباني
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار KOTLIN الكامل بالعربي.