البرمجة

خاصية في Kotlin للحصول على القيمة دون إظهارها

في Kotlin، لا يمكنك تعيين مستوى وصول مختلف للدالة المسترجعة (getter) عن الخاصية (property) نفسها، وذلك لأنها تعتبر جزءًا من نفس الهيكل. ولكن يمكنك تحقيق هذا السلوك من خلال تعريف خاصية مخصصة (custom property) في Kotlin. هناك عدة طرق للقيام بذلك، ومنها استخدام حقل خاص (private field) لتخزين القيمة وتوفير دالة مستقبل (setter) عامة:

kotlin
private var _status: String = "" var status: String get() = _status set(value) { // قد يكون هناك المزيد من الكود للتحقق من القيمة المُعطاة قبل السماح بتعيينها _status = value }

في هذا المثال، تم استخدام حقل _status كمكان لتخزين القيمة الفعلية للخاصية status، والتي يمكن الوصول إليها عبر الدالة المسترجعة (getter) وتعيين قيمتها عبر الدالة المستقبلة (setter). من خلال هذا التصميم، يمكن للكود في Kotlin استخدام الخاصية status بشكل عادي، بينما يمكن للكود في Java فقط استخدام الدالة setStatus لتعيين القيمة.

يرجى ملاحظة أن استخدام حقل خاص (private field) لتخزين القيمة يسمح بتحقيق هذا السلوك المطلوب، لكنه يعتبر متطلبًا غالبًا عند التعامل مع الجافا لضمان التوافقية مع كود Java الموجود.

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

في Kotlin، يمكنك أيضًا استخدام خواص مرافقة (accompanying properties) لتحقيق هذا السلوك بشكل أنيق. تُستخدم خواص المرافقة للسماح بتعريف الدوال المسترجعة (getter) والمستقبلة (setter) للخاصية بشكل منفصل عن تعريف الخاصية نفسها. يمكنك تحقيق هذا عبر الكود التالي:

kotlin
var status: String = "" private set fun setStatus(value: String) { status = value }

في هذا المثال، تم تعريف خاصية status كمتغير (var) عام يحتوي على قيمة افتراضية فارغة، ولكن تم تعيين الوصول إلى الدالة المسترجعة (getter) كعام والوصول إلى الدالة المستقبلة (setter) كخاص. هذا يعني أنه يمكن الوصول إلى القيمة الحالية للخاصية status عبر الدالة المسترجعة (getter) في أي مكان في الكود، ولكن يمكن فقط تعيين قيمة جديدة لها عبر الدالة setStatus، وهذا يحقق المتطلبات التي ذكرتها لتفادي استخدام الدالة getStatus في Java.

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