0Pricing
Kotlin Academy · درس

أساسيات Data Class: الدوال المُنشأة تلقائيًا

تعرّف على ما ينشئه data class: ‏equals وhashCode وtoString وcopy.

أساسيات Data Class: الدوال المُنشأة تلقائيًا درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ما هي فئة البيانات؟

data class هي فئة يكون غرضها الأساسي الاحتفاظ بالقيم. ينشئ مترجم Kotlin تلقائيًا الدوال equals وhashCode وtoString وcopy وcomponentN نيابةً عنك.

التصريح عن فئة بيانات

أضف data قبل الفئة العادية. يجب أن تكون جميع معاملات الباني الأساسي val أو var.

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

‏toString المُنشأ تلقائيًا

ينشئ المترجم دالة toString تعرض كل خاصية باسمها.

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

‏equals المُنشأ تلقائيًا

تقارن equals جميع قيم الخصائص — ويُعد مثيلان لهما الحقول نفسها متساويين بغض النظر عن تطابق المرجع.

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

‏hashCode المُنشأ تلقائيًا

يتوافق hashCode مع equals: فالكائنات المتساوية تنتج قيم hash متساوية، ولذلك تعمل فئات البيانات بشكل صحيح داخل المجموعات ومفاتيح الخرائط.

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

‏copy المُنشأ تلقائيًا

تنشئ copy() مثيلًا جديدًا بقيم الحقول نفسها، مع السماح بتجاوز قيمة كل حقل باستخدام الوسائط المسماة.

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

‏componentN المُنشأ تلقائيًا

تحصل كل خاصية على دالة componentN() (مثل component1 وcomponent2 و...)، مما يتيح التفكيك.

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

ما لا تفعله فئات البيانات

لا تنشئ فئات البيانات دالة toString للحقول الموروثة، وتكون final افتراضيًا، ولا يمكن أن تكون abstract أو open أو sealed أو inner.

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

الخصائص خارج الباني الأساسي

لا تشارك الخصائص المُصرَّح عنها في جسم الفئة في equals أو hashCode أو toString أو copy.

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

القيم الافتراضية

اجمع بين data class والمعاملات ذات القيم الافتراضية لإنشاء الكائنات بمرونة.

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

تطبيق عملي: فئة DTO

تُعد فئات البيانات مثالية لكائنات DTO واستجابات API وكائنات القيم.

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

تحقق سريع

أي دالة لا ينشئها مترجم Kotlin تلقائيًا لفئة البيانات؟

مراجعة

تنشئ data class تلقائيًا equals وhashCode وtoString وcopy وcomponentN اعتمادًا على خصائص الباني الأساسي. وتُستبعد الخصائص الموجودة خارج الباني. استخدم فئات البيانات لكائنات DTO وكائنات القيم وأي حاوية لقيم مترابطة.

الأسئلة الشائعة

هل درس «أساسيات Data Class: الدوال المُنشأة تلقائيًا» مجاني؟

نعم — نص درس «أساسيات Data Class: الدوال المُنشأة تلقائيًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات Data Class: الدوال المُنشأة تلقائيًا»؟

تعرّف على ما ينشئه data class: ‏equals وhashCode وtoString وcopy. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟

لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات Data Class: الدوال المُنشأة تلقائيًا»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟

نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات Data Class: الدوال المُنشأة تلقائيًا
  2. النسخ باستخدام copy() والتجاوز الجزئي
  3. تصريحات التفكيك باستخدام componentN
  4. Data Classes في المجموعات ومفاتيح Map
← العودة إلى Kotlin Academy