Kotlin Academy · درس

أساسيات Reflection

افحصوا الأنواع وقت التشغيل

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

أساسيات 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. استخدام Annotations
  2. تعريف Annotations
  3. أساسيات Reflection
  4. Reflection عملي
← العودة إلى Kotlin Academy