صيغة النقطتين
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy — الدرس 3 من 70.
كتابة counter.increment(counter) في كل مرة هو أمر مرهق وعرضة للأخطاء. توفر Lua طريقة أسهل: نقطتان (:) operator.
عندما تقوم بتعريف function باستخدام colon، تضيف Lua تلقائيًا self كمعلمة أولى:
local player = {
name = "Hero"
}
-- استخدام النقطتين في التعريف
function player:greet()
print("Hello, I am " .. self.name)
endيعمل الـ colon أيضاً عند استدعاء الـ function. حيث يقوم بتمرير الـ table تلقائياً كأول معامل (argument):
player:greet() -- المخرجات: Hello, I am Heroهذا يماثل كتابة player.greet(player)، ولكنه أنظف بكثير. حيث تتعامل النقطتان الراسيتان مع المعلمة self في كلا الطرفين—أثناء التعريف وأثناء الاستدعاء.
إليك مقارنة توضح كيف ينتج كلا الأسلوبين نتائج متطابقة:
local counter = { value = 0 }
-- صيغة النقطة (self صريح)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- صيغة النقطتين (self تلقائي)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()صياغة النقطتين (Colon) هي الطريقة القياسية لتعريف واستدعاء الميثودز (methods) في Lua. فهي تجعل كودك أقصر وأقل تكرارًا.
التحدي
سهلأنشئ table باسم greeter يحتوي على field باسم message مهيأ بقيمة ستتلقاها كـ input.
أضف method باسم :sayHello(name) using الـ colon syntax يطبع الـ greeting بهذا التنسيق:
[message], [name]!ستتلقى إدخالين:
- رسالة الـ
greetingلتخزينها فيgreeter.message - الـ
nameلتمريره إلىmethodالـ:sayHello()
قم بـ definition الـ method using الـ colon syntax و Call بها using الـ colon syntax. قم بـ print الـ greeting المنسق.
على سبيل المثال، إذا كانت الـ message هي Welcome والـ name هو Luna، فإن الـ Output يجب أن يكون:
Welcome, Luna!جرّب بنفسك
-- اقرأ الإدخال
local message = io.read()
local name = io.read()
-- TODO: اكتب الكود الخاص بك أدناه
-- 1. أنشئ جدولاً باسم 'greeter' مع حقل 'message'
-- 2. أضف method :sayHello(name) باستخدام صيغة النقطتين
-- 3. استدعِ الـ method باستخدام صيغة النقطتين لطباعة التحيةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
4مشروع: بنك رقمي
إعداد المشروعطريقة الإيداع7تعدد الأشكال وإعادة التعريف
إعادة تعريف الدوالاستدعاء دوال الفئة الأبDuck Typingواجهة مشتركةالتحقق من النوعمراجعة - أدوار الموظفين2نمط النموذج الأولي للفئات
مفهوم النموذج الأوليالربط باستخدام __indexالمنشئ :new()تهيئة الخصائصنسخ مستقلةملخص - مصنع السيارات5تحميل المعاملات في OOP
جمع الكائناتطرح الكائناتدمج الكائناتمقارنة الكائنات (<, >)مراجعة - رياضيات المحفظة8التغليف
اصطلاحات التسميةاستخدام Closures للخصوصيةالوصول عبر Closuresجداول للقراءة فقطمنطق التحقق من الصحةمراجعة - الخزنة الآمنة11أنماط التصميم (مبسط)
دوال المصنعجدول Singletonنمط الـ Iteratorالمراقب (المستمع)مراجعة - مصنع الـ Logger3حالة الكائن وسلوكه
متغيرات النسخةدالات الجلب (Getter Methods)دالات التعيين (Setter Methods)الخصائص المحسوبةتنسيق النصوصالتحقق من المساواةمراجعة - درجة الطالب6أساسيات الوراثة
إعداد الوراثةوراثة الـ Methodsتوسيع الـ Constructorإضافة Methods للابنالمشترك مقابل الفريدملخص - التسلسل الهرمي للأشكال