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

النقطة مقابل النقطتين

جزء من قسم البرمجة كائنية التوجه في رحلة 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، واستخدم النقطة عندما لا تحتاج إليها.

challenge icon

التحدي

سهل

Create جدولًا named player with a field score initialized to 0.

Add two functions to the جدول:

  1. player.setScore(self, value) - defined with dot syntax and explicit self parameter. Sets self.score to the given value.
  2. player:addBonus(amount) - defined with colon syntax. Adds amount to self.score.

You will receive two inputs:

  1. An initial score value
  2. A bonus amount to add

Perform the following steps:

  1. Call setScore using dot syntax (passing the جدول as the first argument) to set the initial score
  2. Call addBonus using colon syntax to add the bonus
  3. 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)
quiz iconاختبر نفسك

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

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

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