المنشئ :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() المكان الوحيد الذي يحدث فيه إنشاء الكائنات، مما يجعل شفرتك منظمة وقابلة للتنبؤ.
التحدي
سهللنَبْنِ فئة 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() العدد المحدد من المرات
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكالتدرّب بنفسك: مترجم Lua عبر الإنترنت