0Pricing
Lua Academy · درس

تصميم الفئة الأساسية والمنشئ

صمّم مصنع Class() يهيّئ جداول البيانات الوصفية ومنشئات new()

تصميم الفئة الأساسية والمنشئ درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

الهدف: مصنع أصناف قابل لإعادة الاستخدام

نريد دالة Class() تُرجع كائن صنف جديدًا، مع مُنشئ مناسب والبحث عن الطرق ودلالات OOP.

هيكل مصنع الأصناف

ينشئ المصنع جدول صنف مع metatable لتوزيع الطرق.

local function Class()
  local cls = {}
  cls.__index = cls
  cls.__name = "AnonymousClass"
  function cls:new(...)
    local instance = setmetatable({}, cls)
    if instance.init then instance:init(...) end
    return instance
  end
  return cls
end

تعريف صنف

أنشئ صنفًا، وعرّف init (المُنشئ)، وأضف الطرق.

local Animal = Class()
Animal.__name = "Animal"
function Animal:init(name, sound)
  self.name = name
  self.sound = sound
end
function Animal:speak()
  print(self.name .. " says " .. self.sound)
end
local cat = Animal:new("Cat", "Meow")
cat:speak()  -- Cat says Meow

نمط المُنشئ

ينشئ المُنشئ :new(...) نسخةً عبر setmetatable({}, cls)، ثم يستدعي :init(...) لتهيئتها. ويفصل ذلك بين تخصيص الذاكرة والتهيئة.

اسم الصنف لتصحيح الأخطاء

خزّن cls.__name وعرّف __tostring لكي تُطبع النسخ بصورة مفهومة.

function Animal:__tostring()
  return "<" .. Animal.__name .. ": " .. self.name .. ">"
end
print(tostring(cat))  -- <Animal: Cat>

القيم الافتراضية في init

وفّر قيمًا افتراضية في init باستخدام or.

function Vehicle:init(opts)
  self.speed  = opts.speed  or 0
  self.fuel   = opts.fuel   or 100
  self.engine = opts.engine or "petrol"
end

طرق الصنف مقابل طرق النسخة

الطرق المعرّفة باستخدام function cls.method() هي طرق صنف (ولا تتلقى self). أما الطرق المعرّفة باستخدام function cls:method() فتتلقى النسخة باعتبارها self.

الخصائص الثابتة

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

Animal.count = 0
function Animal:init(name, sound)
  Animal.count = Animal.count + 1
  self.name = name; self.sound = sound
end
print(Animal.count)  -- 0
Animal:new("Dog","Woof")
print(Animal.count)  -- 1

مُنشئ النسخ

تنشئ طريقة :clone() نسخةً من نسخة أخرى عبر نسخ حقولها نسخًا سطحيًا.

function Animal:clone()
  local copy = setmetatable({}, getmetatable(self))
  for k, v in pairs(self) do copy[k] = v end
  return copy
end

طريقة المساواة

عرّف __eq لإجراء مقارنات مساواة ذات معنى بين النسخ.

Animal.__eq = function(a, b)
  return a.name == b.name
end

لماذا لا نستخدم rawget؟

استخدم self.field (بدلًا من rawget) للسماح بالوصول إلى الحقول عبر الطرق الوصفية في الأصناف المشتقة. ولا تستخدم rawget إلا عند الحاجة الصريحة إلى تجاوز هذا السلوك.

سؤال حول تصميم المُنشئ

لماذا يُستدعى init بصورة منفصلة عن مُخصِّص new؟

مراجعة: الصنف الأساسي والمُنشئ

ينشئ مصنع Class() جدولًا باعتباره صنفًا، ويضبط __index = cls للبحث عن الطرق، ويوفر :new() و:init(). وهذا هو الأساس لجميع أنماط OOP في Lua.

الأسئلة الشائعة

هل درس «تصميم الفئة الأساسية والمنشئ» مجاني؟

نعم — نص درس «تصميم الفئة الأساسية والمنشئ» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «تصميم الفئة الأساسية والمنشئ»؟

صمّم مصنع Class() يهيّئ جداول البيانات الوصفية ومنشئات new() تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تصميم الفئة الأساسية والمنشئ»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تصميم الفئة الأساسية والمنشئ
  2. الوراثة متعددة المستويات
  3. تركيب Mixin والتحقق من الواجهات
  4. ‏instanceof واستبطان النوع
← العودة إلى Lua Academy