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

المنشئ :new()

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

إنشاء الكائنات يدويًا، وإنشاء empty table، وتعيين metatable الخاص بها، وربط __index يصبح أمرًا متكررًا. الحل القياسي هو Define طريقة :new() constructor مباشرةً في class تتولى كل ذلك نيابةً عنك.

إليك النمط:

local Dog = {}
Dog.__index = Dog

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

function Dog:bark()
    print("Woof!")
end

لنُفصّل ما يحدث داخل :new(). أولًا، ننشئ empty table تُسمى instance. ثم نضبط metatable الخاصة بها على self، والتي تكون Dog عندما نستدعي Dog:new().

بما أن Dog.__index يشير إلى Dog نفسه، يمكن لـ instance العثور على جميع الأساليب المعرّفة في Dog. وأخيرًا، نُعيد الكائن الجديد.

لاحظ السطر Dog.__index = Dog خارج constructor. هذا اختصار شائع؛ فبدلاً من إنشاء metatable منفصل، يعمل table الخاص بـ class بوصفه كلًّا من النموذج الأولي وmetatable.

أصبح إنشاء الكائنات الآن نظيفًا ومتسقًا:

local myDog = Dog:new()
myDog:bark()  -- المخرجات: Woof!

كل class تنشئها ستتبع البنية نفسها. يصبح constructor ‏:new() المكان الوحيد الذي يحدث فيه إنشاء الكائنات، مما يجعل شفرتك منظمة وقابلة للتنبؤ.

challenge icon

التحدي

سهل

لنَبْنِ فئة Cat باستخدام نمط الباني القياسي الذي تعلمته للتو. ستنظّم التعليمات البرمجية عبر ملفين للتدرّب على بنية الوحدات بشكل صحيح.

ستنشئ:

  • Cat.lua: عرّف فئة Cat باستخدام نمط الباني الكامل. يجب أن تتضمن فئتك:
    • جدول الفئة مع توجيه __index إلى نفسه
    • باني :new() ينشئ مثيلًا، ويضبط جدول البيانات الوصفية الخاص به، ثم يعيده
    • طريقة :meow() تطبع صوت القطة
    أعد جدول الفئة في نهاية الملف.
  • main.lua: اطلب وحدة Cat واستخدم الباني لإنشاء مثيل لقطة. ثم استدعِ طريقتها للتحقق من أن كل شيء مرتبط بشكل صحيح.

ستتلقى مُدخلًا واحدًا: عدد المرات التي ينبغي لقطتك أن تموء فيها.

يجب أن تطبع طريقتك :meow() تمامًا:

Meow!

في ملفك الرئيسي، أنشئ قطة باستخدام Cat:new() واستدعِ :meow() عدد المرات المحدد.

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

Meow!
Meow!
Meow!
تنسيق الناتج المطلوب: [محتواك المترجم هنا]

جرّب بنفسك

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

-- اقرأ الإدخال: عدد مرات المواء
local times = tonumber(io.read())

-- TODO: أنشئ مثيل cat باستخدام Cat:new()

-- TODO: استدعِ الدالة :meow() العدد المحدد من المرات
quiz iconاختبر نفسك

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

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

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