دالات الجلب (Getter Methods)
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 13 من 70.
لقد تعلّمت تخزين البيانات في متغيرات المثيل مثل self.health أو self.items. رغم أنه يمكنك الوصول إلى هذه الحقول مباشرةً من خارج الكائن، فهناك نهج أكثر تنظيمًا: استخدام أساليب getter.
إن getter (ويُسمّى أيضًا method للوصول) هو method بسيط يُعيد قيمة داخلية. بدلًا من الوصول إلى player.health مباشرةً، تستدعي player:getHealth():
local Player = {}
Player.__index = Player
function Player:new(name)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.health = 100
return instance
end
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endلماذا نكلف أنفسنا بعنصر method إضافي؟ توفر Getters نقطة وصول مضبوطة إلى data الخاصة بك.
في الوقت الحالي، تقوم :getHealth() ببساطة بإرجاع القيمة. لكن لاحقًا، قد ترغب في إضافة منطق: ربما إرجاع "Critical" إذا انخفضت health إلى أقل من 10، أو تسجيل كل مرة يتم فيها التحقق من health.
مع وجود أداة getter، يمكنك إجراء هذه التغييرات دون تعديل أي كود يستخدم الكائن.
local hero = Player:new("Luna")
print(hero:getHealth()) -- المخرجات: 100
print(hero:getName()) -- المخرجات: Lunaينشئ هذا النمط حدودًا واضحة بين البنية الداخلية للكائن وكيفية تفاعل التعليمات البرمجية الأخرى معه. يطلب العالم الخارجي البيانات من خلال الأساليب بدلًا من الوصول مباشرةً إلى حقول الكائن.
التحدي
سهللنبنِ فئة Player تستخدم أساليب getter للوصول إلى بياناتها الداخلية. بدلًا من الوصول مباشرةً إلى حقول اللاعب، ستنشئ أساليب توفّر وصولًا مضبوطًا إلى معلومات اللاعب.
ستنظّم الشيفرة عبر ملفين:
Player.lua: عرّف فئةPlayerباستخدام نمطprototypeالقياسي. يجب أن يقبل المُنشئ اسمًا ويهيّئ health إلى100. أضف ثلاثة أساليب getter::getName()يعيد اسم اللاعب:getHealth()يعيد health الحالية للاعب:getStatus()يعيد سلسلة منسّقة تجمع قطعتي المعلومات معًا
main.lua: استخدم Require لوحدة Player وأنشئ instance للاعب. استخدم أساليب getter لعرض معلومات اللاعب: وصّل إلى كل شيء عبر الأساليب بدلًا من قراءة الحقول مباشرةً.
يجب أن يعيد أسلوب :getStatus() سلسلة بالتنسيق الدقيق التالي:
[name] has [health] HPستتلقى input واحدًا: اسم اللاعب.
في ملفك الرئيسي، أنشئ لاعبًا بالاسم given، ثم اطبع ثلاثة أسطر باستخدام أساليب getter:
- اسم اللاعب (باستخدام
:getName()) - health اللاعب (باستخدام
:getHealth()) - status الكامل للاعب (باستخدام
:getStatus())
على سبيل المثال، إذا كان input هو Luna، فيجب أن يكون Output:
Luna
100
Luna has 100 HPجرّب بنفسك
-- استيراد وحدة Player
local Player = require('Player')
-- قراءة الإدخال
local name = io.read()
-- TODO: أنشئ مثيلاً للاعب بالاسم المعطى
-- TODO: اطبع اسم اللاعب باستخدام :getName()
-- TODO: اطبع صحة اللاعب باستخدام :getHealth()
-- TODO: اطبع حالة اللاعب باستخدام :getStatus()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت