Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالات الجلب (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

ينشئ هذا النمط حدودًا واضحة بين البنية الداخلية للكائن وكيفية تفاعل التعليمات البرمجية الأخرى معه. يطلب العالم الخارجي البيانات من خلال الأساليب بدلًا من الوصول مباشرةً إلى حقول الكائن.

challenge icon

التحدي

سهل

لنبنِ فئة 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:

  1. اسم اللاعب (باستخدام :getName())
  2. health اللاعب (باستخدام :getHealth())
  3. 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()
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Lua عبر الإنترنت