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

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 الكامل بالعربي.