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