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

تهيئة الخصائص

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 9 من 70.

تُنشئ دالة البناء :new() التي تعلّمتها كائنات، لكن كل instance يبدأ متطابقًا. تحتاج الكائنات الحقيقية إلى بيانات فريدة: يمتلك الشخص اسمًا محددًا، ويمتلك اللاعب score ابتدائية. لجعل الكائنات مفيدة، يجب أن تقبل دالة البناء وسيطات وتعيّنها إلى النسخة الجديدة.

إليك كيفية توسيع constructor لقبول القيم الأولية:

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

يأخذ name وbreed الآن كمعاملين. بعد إنشاء الكائن الفارغ وتعيين metatable الخاص به، نُسنِد هذه القيم مباشرةً إلى حقول الكائن. سيكون لكل كائن يتم إنشاؤه name وbreed الخاصان به.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- المخرجات: أنا Rex، a German Shepherd
dog2:introduce()  -- المخرجات: أنا Bella، a Poodle

يشترك الكلبان في أسلوب :introduce() نفسه من النموذج الأولي، لكن لكلٍّ منهما اسم وسلالة فريدان خاصان به مخزّنان في جدول instance الخاص به. هذه هي قوة الجمع بين النماذج الأولية والمنشئات ذات المعلمات: سلوك مشترك مع حالة فردية.

challenge icon

التحدي

سهل

لنَبْنِ فئة Person تنشئ أفرادًا فريدين، لكلٍّ منهم أسماؤهم وأعمارهم الخاصة. ستنظّم شيفرتك عبر ملفين للتدرّب على بنية module الصحيحة.

ستنشئ:

  • Person.lua: عرّف فئة Person باستخدام constructor يقبل اسمًا وعمرًا. أدرج method ‏:introduce() تتيح لكل شخص أن يعرّف بنفسه.
  • main.lua: استخدم Require لوحدة Person وأنشئ instance لشخص باستخدام المدخلات المقدَّمة. ثم اجعله يعرّف بنفسه.

يجب أن يقبل constructor ‏:new(name, age) القيمتين كلتيهما ويخزّنهما في instance الجديدة. يجب أن تطبع method ‏:introduce() بالتنسيق المطابق تمامًا للتالي:

Hello, my name is [name] and I am [age] years old

ستتلقى مدخلين:

  1. اسم الشخص
  2. عمر الشخص

على سبيل المثال، إذا كانت المدخلات هي Alice و25، فيجب أن يكون الناتج:

Hello, my name is Alice and I am 25 years old

جرّب بنفسك

-- استيراد وحدة Person
local Person = require('Person')

-- قراءة الإدخال
local name = io.read()
local age = io.read()

-- TODO: أنشئ مثيلاً جديداً من Person باستخدام Person:new(name, age)

-- TODO: استدعِ الدالة introduce() على مثيل person الخاص بك
quiz iconاختبر نفسك

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

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

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