النقطة مقابل النقطتين
جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 4 من 70.
now بعد أن تعرف كلاً من dot وcolon syntax، من الضروري أن تفهم متى تستخدم كلًّا منهما، وما الذي يحدث عندما تخلط بينهما بشكل غير صحيح.
القاعدة الأساسية بسيطة: يجب أن تتطابق طريقة تعريفك لـ function مع طريقة call لها. إذا عرّفت باستخدام colon، فاستدعِها باستخدام colon. وإذا عرّفت باستخدام dot وexplicit self، فاستدعِها باستخدام dot ومرّر table.
إليك ما يحدث عند عدم تطابقها:
local game = { score = 0 }
function game:addPoints(points)
self.score = self.score + points
end
-- WRONG: الاستدعاء بالنقطة، لكن لم يتم تمرير الجدول
game.addPoints(10) -- خطأ! self أصبح الآن 10، وليس الجدولعندما تستدعي game.addPoints(10)، لا تمرّر Lua القيمة game تلقائيًا. تصبح القيمة 10 هي self، مما يسبب سلوكًا غير متوقع أو أخطاء.
الاتجاه المعاكس أكثر تساهلًا:
function game.reset(self)
self.score = 0
end
-- الاستدعاء بنقطتين: game:reset() هو نفسه game.reset(game)
game:reset() -- self يستقبل game بشكل صحيح، لذا هذا يعملرغم أن هذه الحالة المحددة قد تعمل، فإنها تُحدث ارتباكًا وقد تؤدي إلى تعطيل وظائف تتوقع arguments محددة. النهج الأكثر أمانًا هو الاتساق: استخدم colon لكلٍّ من التعريف وcall عندما تحتاج function إلى self، واستخدم النقطة عندما لا تحتاج إليها.
التحدي
سهلCreate جدولًا named player with a field score initialized to 0.
Add two functions to the جدول:
player.setScore(self, value)- defined with dot syntax and explicitselfparameter. Setsself.scoreto the given value.player:addBonus(amount)- defined with colon syntax. Addsamounttoself.score.
You will receive two inputs:
- An initial score value
- A bonus amount to add
Perform the following steps:
- Call
setScoreusing dot syntax (passing the جدول as the first argument) to set the initial score - Call
addBonususing colon syntax to add the bonus - Print the final value of
player.score
Remember: match how you call each function to how it was defined.
جرّب بنفسك
-- اقرأ المدخلات
local initialScore = tonumber(io.read())
local bonusAmount = tonumber(io.read())
-- TODO: اكتب الكود الخاص بك أدناه
-- 1. أنشئ جدولاً باسم 'player' مع حقل 'score' مهيأ إلى 0
-- 2. أضف player.setScore(self, value) باستخدام صيغة النقطة مع self صريح
-- 3. أضف player:addBonus(amount) باستخدام صيغة النقطتين
-- 4. استدعِ setScore باستخدام صيغة النقطة (تمرير الجدول كأول وسيط)
-- 5. استدعِ addBonus باستخدام صيغة النقطتين
-- اطبع الدرجة النهائية
print(player.score)يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
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 عبر الإنترنت