Menu
CoddyTech

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

جزء من قسم البرمجة كائنية التوجه في رحلة Lua على Coddy. الدرس 4 من 70.

والآن بعد أن عرفت صياغة النقطة والنقطتين، إليك العلاقة بينهما وما يحدث خطأً عندما لا يُمرَّر الجدول.

النقطتان الرأسيتان كلتاهما اختصار. تعريف function game:addPoints(points) هو نفسه تعريف function game.addPoints(self, points)، واستدعاء game:addPoints(10) هو نفسه استدعاء game.addPoints(game, 10). تعمل الدالة التابعة ما دام الجدول يصل إليها بوصفه وسيطها الأول.

إليك ما يحدث عندما لا يتم تمرير الجدول:

local game = { score = 0 }

function game:addPoints(points)
    self.score = self.score + points
end

-- خطأ: استدعاء باستخدام النقطة، لكن لم يُمرَّر أي جدول
game.addPoints(10)  -- خطأ! أصبح self الآن 10، وليس الجدول

عندما تستدعي game.addPoints(10)، لا تمرّر Lua القيمة game تلقائيًا. تصبح القيمة 10 هي self، ويفشل self.score لأن 10 عدد، وليس جدولًا.

تعمل الدالة المعرّفة بنقطة وبوسيط self صريح عند استدعائها بنقطتين، لأن النقطتين تمرّران الجدول بوصفه الوسيط الأول:

function game.reset(self)
    self.score = 0
end

-- الاستدعاء باستخدام النقطتين: game:reset() هو نفسه game.reset(game)
game:reset()  -- يتلقى self القيمة game بشكل صحيح، لذا يعمل هذا

ينشئ التعريفان الدالة نفسها، لذا فالاختيار اصطلاح: استخدم النقطتين لتعريف الدوال التي تعمل على self واستدعائها، والنقطة للدوال التي لا تستخدم self. عندئذٍ يوضّح كل استدعاء ما إذا كان الجدول مُمرَّرًا.

challenge icon

التحدي

سهل

أنشئ جدولًا باسم player يحتوي على حقل score وقيمته الابتدائية 0.

أضف دالتين إلى الجدول:

  1. player.setScore(self, value) - تُعرَّف باستخدام صياغة النقطة ومعامل self صريح. تعيّن self.score إلى القيمة المحددة.
  2. player:addBonus(amount) - تُعرَّف باستخدام صياغة النقطتين. تضيف amount إلى self.score.

ستتلقى مُدخلَين:

  1. قيمة النتيجة الابتدائية
  2. مقدار المكافأة المراد إضافته

نفّذ الخطوات التالية:

  1. استدعِ setScore باستخدام صياغة النقطة (مع تمرير الجدول باعتباره الوسيط الأول) لتعيين النتيجة الابتدائية
  2. استدعِ addBonus باستخدام صياغة النقطتين لإضافة المكافأة
  3. اطبع القيمة النهائية لـ player.score

تذكّر: طابِق طريقة استدعاء كل دالة مع طريقة تعريفها.

جرّب بنفسك

-- اقرأ المدخلات
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 عبر الإنترنت