البرمجة

كيفية الحصول على قيمة السمة في Kotlin

للحصول على قيمة السمة (Attribute) من التعليق (Annotation) في كوتلن، يمكنك استخدام الميزة القوية للانعكاسية (Reflection) المتوفرة في اللغة. في الشيفرة المعروضة، يتم استخدام الانعكاسية للوصول إلى تعليق @Table والآن يحتاج المطور للوصول إلى قيمة السمة “name” من هذا التعليق.

للقيام بذلك، يمكن استخدام ميزة الانعكاسية للوصول إلى أعضاء السمة (Attributes)، ويمكن فعل ذلك باستخدام الدالة المساعدة getValue() مع تمرير اسم الخاصية المراد الوصول إليها كمعلمة. في هذه الحالة، يجب الوصول إلى الخاصية “name”.

لنقم بتطبيق هذا في الشيفرة:

kotlin
import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.memberProperties fun tableName(c: KClass<T>): String? { // الحصول على التعليق @Table val tableAnnotation = c.annotations.find { it.annotationClass == Table::class } // التأكد من وجود التعليق @Table if (tableAnnotation != null) { // الحصول على القيمة المطلوبة من السمة @Table val tableNameValue = (tableAnnotation as Table).name // إرجاع القيمة المستردة return tableNameValue } return null } fun main() { val tableName = tableName(User::class) println("اسم الجدول: $tableName") }

هذا الكود سيسمح لك بالحصول على قيمة السمة “name” من تعليق @Table في الفئة المحددة. سيقوم الدالة tableName() بتحليل التعليقات الموجودة على الفئة المعطاة والبحث عن تعليق @Table، ثم سيقوم بإرجاع قيمة السمة “name” إذا وجدت.

المزيد من المعلومات

بالطبع، دعنا نكمل المقال بشرح أكثر تفصيلاً حول الكود وطريقة عمله:

عند العمل مع الإنعكاسية في Kotlin، يمكنك استخدام الوظائف والميزات المتقدمة المتاحة في المكتبة القياسية للوصول إلى معلومات الفئات والتعليقات والسمات. في هذه الحالة، قمنا بتعريف دالة tableName() التي تأخذ معلمة من نوع KClass تمثل الفئة التي نريد البحث فيها عن التعليق @Table.

باستخدام c.annotations.find { it.annotationClass == Table::class }، نبحث في قائمة التعليقات للفئة عن التعليق @Table. إذا وُجد، فإن السطر التالي val tableNameValue = (tableAnnotation as Table).name يقوم بالتحقق من قيمة السمة “name” المحددة في التعليق. هذه القيمة ستُرجع من الدالة.

أما في حالة عدم العثور على التعليق @Table، فسيتم إرجاع قيمة null كما هو موضح في الكود.

وبالنهاية، يتم استدعاء الدالة tableName() في دالة main()، حيث يتم تمرير الفئة User::class كمعلمة. بمجرد تنفيذ البرنامج، ستطبع الدالة الناتج، والذي يمكن أن يكون اسم الجدول الموجود في القاعدة بيانات، على الشاشة.

تعتبر الإنعكاسية أداة قوية في Kotlin وتوفر وسيلة مرنة للتعامل مع التعليقات والسمات، مما يسمح للمطورين بكتابة كود يكون أكثر ديناميكية وقابلية للتوسع. باستخدام هذه الأدوات، يمكنك بسهولة تطوير تطبيقات Kotlin الخاصة بك بشكل أكثر ذكاء وفعالية.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر