Kotlin Academy · درس

انعكاس Kotlin: ‏KClass وKFunction وKProperty

تصفّح البيانات الوصفية للأصناف باستخدام KClass وافحص الأعضاء بالانعكاس.

الدرس 1 من 413 خطوة

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

ما الانعكاس؟

يتيح الانعكاس للشيفرة فحص بنيتها واستدعاءها في وقت التشغيل، بما في ذلك الأصناف والدوال والخصائص والتعليقات التوضيحية والمنشئات. وتغلّف Kotlin واجهة انعكاس JVM البرمجية بأنواعها الخاصة الأكثر غنىً ضمن الحزمة kotlin.reflect.

الحصول على KClass

استخدم ::class مع نوع أو مثيل للحصول على مرجع KClass:

val klass: KClass<String> = String::class
val instance: KClass<out Any> = "hello"::class
println(klass.simpleName)  // "String"

خصائص KClass

يوفّر KClass بيانات وصفية عن الصنف:

val klass = String::class
println(klass.simpleName)        // "String"
println(klass.qualifiedName)     // "kotlin.String"
println(klass.isAbstract)        // false
println(klass.constructors.size) // number of constructors

KFunction: مراجع قابلة للاستدعاء

استخدم ::functionName للحصول على مرجع KFunction. ويمكنك فحص معلماته واستدعاءه:

fun greet(name: String) = "Hello, $name!"

val fn: KFunction<String> = ::greet
println(fn.name)           // "greet"
println(fn.call("Kotlin")) // "Hello, Kotlin!"

فحص المعلمات

تعيد KFunction.parameters قائمة من كائنات KParameter التي تتضمن الاسم والنوع وما إذا كانت المعلمة اختيارية:

fun add(a: Int, b: Int) = a + b

::add.parameters.forEach {
    println("${it.name}: ${it.type}")
}
// a: kotlin.Int
// b: kotlin.Int

KProperty: مراجع الخصائص

تلتقط مراجع الخصائص خاصيةً بوصفها كائنًا من الدرجة الأولى. ويُستخدم KProperty0 للخصائص التي لا تحتوي على مستقبل؛ أما KProperty1 فيُستخدم لخصائص الأعضاء.

data class User(val name: String, val age: Int)

val prop: KProperty1<User, String> = User::name
val user = User("Alice", 30)
println(prop.get(user))  // "Alice"

الخصائص القابلة للتغيير باستخدام KMutableProperty

بالنسبة إلى خصائص var، يكون المرجع من النوع KMutableProperty1، الذي يحتوي أيضًا على دالة set:

class Box(var value: Int)

val prop: KMutableProperty1<Box, Int> = Box::value
val box = Box(10)
prop.set(box, 42)
println(box.value)  // 42

سرد جميع الأعضاء

تعيد KClass.members جميع الأعضاء المرئية، أي الدوال والخصائص. أما KClass.declaredMemberProperties فتعيد الخصائص المعلنة في ذلك الصنف فقط.

data class Point(val x: Int, val y: Int)

Point::class.declaredMemberProperties.forEach {
    println(it.name)  // "x", "y"
}

إنشاء مثيلات عبر KClass

استدعِ KClass.createInstance()، ويتطلب ذلك منشئًا بلا معلمات، أو استخدم KClass.constructors للتحكم الكامل:

class Counter {
    var count = 0
}
val c = Counter::class.createInstance()
c.count = 5
println(c.count)  // 5

تبعية Kotlin Reflect

يتطلب انعكاس Kotlin الأثر البرمجي kotlin-reflect، وهو غير مضمن في مكتبة stdlib. أضِفه إلى عملية البناء لديك:

// build.gradle.kts
implementation("org.jetbrains.kotlin:kotlin-reflect")

ملاحظة حول الأداء

الانعكاس أبطأ بكثير من الشيفرة المباشرة. خزّن مراجع KClass وKFunction وKProperty مؤقتًا عند بدء التشغيل. وتجنب استدعاءها داخل الحلقات الساخنة. وبالنسبة إلى معظم شيفرات الأدوات والأطر، تكون هذه التكلفة مقبولة.

تحقق سريع

أي نوع في Kotlin يمثل مرجعًا إلى خاصية عضو ويتيح قراءة قيمتها من مثيل؟

مراجعة: انعكاس Kotlin

الأنواع الأساسية:

  • KClass — البيانات الوصفية للصنف والمنشئات والأعضاء
  • KFunction — المراجع القابلة للاستدعاء والمعلمات والاستدعاء
  • KProperty1 / KMutableProperty1 — مراجع الخصائص، والقراءة/الكتابة
  • يتطلب kotlin-reflect في مسار الأصناف
  • خزّن المراجع مؤقتًا وتجنب استخدامها في المسارات الساخنة
البدء مجانًا

تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

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

هل درس «انعكاس Kotlin: ‏KClass وKFunction وKProperty» مجاني؟

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

ماذا ستتعلم في «انعكاس Kotlin: ‏KClass وKFunction وKProperty»؟

تصفّح البيانات الوصفية للأصناف باستخدام KClass وافحص الأعضاء بالانعكاس. تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «انعكاس Kotlin: ‏KClass وKFunction وKProperty»؟

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

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

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

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

  1. انعكاس Kotlin: ‏KClass وKFunction وKProperty
  2. إنشاء التعليقات التوضيحية المخصصة وتحديد أهدافها
  3. قراءة التعليقات التوضيحية وقت التشغيل
  4. التحقق والتعيين المعتمدان على الانعكاس
← العودة إلى Kotlin Academy