أساسيات Reflection
افحصوا الأنواع وقت التشغيل
أساسيات Reflection درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ما الانعكاس؟
الانعكاس هو قدرة البرنامج على فحص بنيته ومعالجتها في وقت التشغيل: الفئات والخصائص والدوال والتعليقات التوضيحية.
يوجد انعكاس Kotlin في الحزمة kotlin.reflect ويتمحور حول KClass.
الحصول على KClass
استخدم البنية ::class مع نوع أو مثيل للحصول على كائن KClass الخاص به.
class Robot
fun main() {
val fromType = Robot::class
val fromInstance = Robot()::class
println(fromType.simpleName)
println(fromInstance.simpleName)
}أسماء الفئة
يوفر KClass العنصرين simpleName وqualifiedName. ويتضمن الاسم المؤهل مسار الحزمة.
class Engine
fun main() {
val k = Engine::class
println(k.simpleName)
println(k.qualifiedName)
}فحص الخصائص
يسرد memberProperties خصائص الفئة. كل خاصية منها هي KProperty يمكنك طلب name الخاص بها.
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
for (p in Point::class.memberProperties) {
println(p.name)
}
}قراءة قيم الخصائص
يمكن استدعاء KProperty1 باستخدام مثيل لقراءة قيمته عبر get(instance).
import kotlin.reflect.full.memberProperties
class Point(val x: Int, val y: Int)
fun main() {
val p = Point(3, 4)
for (prop in Point::class.memberProperties) {
println(prop.name + " = " + prop.get(p))
}
}فحص الدوال
يعيد memberFunctions الدوال القابلة للاستدعاء في الفئة على شكل كائنات KFunction. ويمكنك قراءة name الخاص بكل دالة.
import kotlin.reflect.full.memberFunctions
class Calculator {
fun add(a: Int, b: Int) = a + b
fun negate(a: Int) = -a
}
fun main() {
Calculator::class.memberFunctions
.filter { it.name in listOf("add", "negate") }
.forEach { println(it.name) }
}مراجع الدوال
تنتج البنية ::name مرجعًا قابلًا للاستدعاء من النوع KFunction. ويمكنك استدعاءه لاحقًا باستخدام invoke أو تمريره إلى موضع آخر.
fun double(n: Int) = n * 2
fun main() {
val ref = ::double
println(ref.name)
println(ref.invoke(21))
}إنشاء المثيلات
تنشئ createInstance() كائنًا باستخدام الانعكاس عندما يكون للفئة مُنشئ بلا معاملات.
import kotlin.reflect.full.createInstance
class Widget {
override fun toString() = "Widget"
}
fun main() {
val w = Widget::class.createInstance()
println(w)
}فحص المُنشئات
يسرد constructors مُنشئات الفئة. ويمكنك فحص parameters الخاصة بها لمعرفة الوسائط التي تتوقعها.
class Person(val name: String, val age: Int)
fun main() {
val ctor = Person::class.constructors.first()
ctor.parameters.forEach { println(it.name) }
}التكاليف والمحاذير
الانعكاس قوي، لكنه:
- أبطأ من الاستدعاءات المباشرة
- يتجاوز أمان وقت الترجمة
- يتطلب مكتبة
kotlin-reflectعلى JVM
استخدمه في الأطر والأدوات، لا في الحلقات الساخنة.
صندوق أدوات الانعكاس
تذكر الأنواع الأساسية التالية:
KClass— فئةKProperty— خاصيةKFunction— دالةKParameter— معامل
تتيح لك هذه الأنواع معًا قراءة البنية ديناميكيًا.
تحقق سريع
اختبر مدى فهمك لأساسيات الانعكاس.
مراجعة
تعلمت أساسيات الانعكاس:
- الحصول على
KClassعبر::class - إدراج
memberPropertiesوmemberFunctions - قراءة قيم الخصائص واستدعاء مراجع الدوال
- إنشاء الكائنات باستخدام
createInstance()
التالي: قراءة التعليقات التوضيحية ديناميكيًا.
تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «أساسيات Reflection» مجاني؟
نعم — نص درس «أساسيات Reflection» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات Reflection»؟
افحصوا الأنواع وقت التشغيل تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أساسيات Reflection»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخدام Annotations
- تعريف Annotations
- أساسيات Reflection
- Reflection عملي