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