Mohammad Laif
Mohammad Laif

@mohammadlaif

7 تغريدة 16 قراءة Jun 23, 2020
الفرق بين الـ Field والـ Property
الانتقال من لغة الجافا الى لغة الكوتلن لمطوري الاندرويد أدخل بعض الإشياء الجديدة لديهم منها الخصائص Properties. مع أنها تتشابه مع الحقول Fields ولكن تختلف في جوهر تركيبها! هذا الثرد يبين الاختلاف بينهما وطرق التعامل.
#جافا
#كوتلن
#اندرويد
الحقل الـ Field
مجرد متغير يرجع للفئة نفسها (Member Variable) التي تم تعريفه فيها. يحمل قيمة في داخله (Value). نستطيع تغيير قيمته (Mutable) أو جعله للقراءة (Immutable) فقط. وكذلك نستطيع جعله عام أو خاص (Public or Private).
#جافا
الخاصية الـ Property
أكثر تعقيداً في تركيبها من الحقل Field. بحيث أنها تتكون من حقل خاص ودوال Getter و Setter.
فعندما ننشئها للقراءة والكتابة (Mutable) فإنها تملكهم جميعاً الـ Field و Getter و Setter. أما إذا كان للقراءة (Immutable) فإنها تملك فقط الـ Field والـ Getter.
#كوتلن
أنماط التعامل مع الخواص Properties
عندما نتعامل مع الـ Property في لغة الكوتلن سنحتاج الى نمطين وهما:
- الـ Backing Field والذي يسمح لنا بالوصول للحقل في نطاق الـ Getter و Setter.
- الـ Backing Property الذي يسمح لنا للوصول للحقل بشكل مباشر.
#كوتلن
الـ Backing Field
يفيد هذا النمط في الوصول الى حقل الخاصية في نطاق دوال الـ Getter و الـ Setter والتعديل على المنطق الخاص به.
لاحظ اننا لا نقوم بالإشارة الى الحقل بأسمه حتى لا يحدث رجعية في النداء له (Recursive Invoking) مما يسبب رمي الخطأ StackOverflowError.
#كوتلن
الـ Backing properties
يفيد هذا النمط في الوصول لحقل الخاصية (وليس للـ Getter الخاص بها) من داخل الفئة Class نفسها. وذلك من خلال إنشاء عنصر آخر يحمل نفس الاسم ولكنه يبدأ بعلامة Underscore ويكون بشكل خاص Private.
#كوتلن
مثال عملي للـ Backing properties في الأندرويد
لدينا فئة تقوم بتحديث الوقت في كل ثانية. قمنا بإستخدام الـ LiveData (عنصر لحفظ ومراقبة البيانات) لحفظ ذلك التحديث المستمر من داخل الفئة نفسها بشكل خاص. ثم قمنا بمراقبة ذلك التحديث في فئة أخرى.
#كوتلن
#اندرويد

جاري تحميل الاقتراحات...