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

Self والدوال المسبوقة بنقطتين (Colon Methods)

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy — الدرس 43 من 73.

كتابة rect.area(rect) تعمل، لكنك تعلمت طريقة أفضل سابقاً في البرمجة الكائنية التوجه (OOP) في Lua: وهي النقطتان الرأسيتان (colon). الاستدعاء rect:area() هو بالضبط نفس الاستدعاء — حيث تقوم Lua بتمرير الـ table الذي يسبق الـ colon كـ self كأول وسيط تلقائياً (automatically).

تساعد النقطتان الرأسيتان (colon) عند موقع التعريف أيضاً. الدالة function account:deposit(amount) تعلن عن معامل أول مخفي باسم self نيابة عنك:

type Account = {
    owner: string,
    balance: number,
    deposit: (self: Account, amount: number) -> (),
    getBalance: (self: Account) -> number,
}

local account = {owner = "Maya", balance = 1500}

function account:deposit(amount: number)
    self.balance += amount -- self ضمني
end

function account:getBalance(): number
    return self.balance
end

لاحظ كيف يعلن الشكل عن self بشكل صريح (explicitly)deposit: (self: Account, amount: number) -> () — حتى وإن كانت النقطتان الرأسيتان (colon) تخفيه في التنفيذ. النقطتان الرأسيتان هما مجرد تبسيط برمجي (sugar)؛ المعامل لا يزال موجوداً، والنوع يوضحه بدقة. الدالة (method) التي لا ترجع شيئاً يتم تحديد نوعها باستخدام الإرجاع الفارغ -> ().

اتباع الاستدعاء يخضع لنفس القاعدة التي تعرفها بالفعل: account:deposit(250) مطابقة تماماً لـ account.deposit(account, 250). نفس سلوك وقت التشغيل الموجود في فصل الـ OOP الخاص بك — تضيف Luau الأنواع (types) فوقه فقط.

challenge icon

التحدي

سهل

أنشئ باسم نوع مستعار Account مع:

  • owner من نوع string
  • balance من نوع number
  • deposit(self: Account, amount: number) -> ()
  • getBalance(self: Account) -> number

أنشئ جدولًا account مع owner "Maya" و balance يساوي 1500، ثم قم بإرفاق كلا الطريقتين باستخدام بناء جملة تعريف النقطتين (colon) (function account:deposit(amount: number) …). يقوم deposit بإضافة amount إلى الـ balance؛ بينما يرجع getBalance الـ balance الحالي.

باستخدام استدعاءات النقطتين (colon):

  1. اطبع الـ balance
  2. قم بـ deposit بمقدار 250
  3. اطبع الـ balance مرة أخرى (again)
  4. اطبع الـ owner

جرّب بنفسك

-- اكتب الكود هنا
-- 1) عرّف النوع Account (الطرق تأخذ self بشكل صريح في النوع)
-- 2) أنشئ جدول account، ثم اربط deposit/getBalance بصيغة النقطتين
-- 3) اطبع balance، deposit 250، اطبع balance مرة أخرى، اطبع owner
quiz iconاختبر نفسك

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

جميع دروس مقدمة إلى Luau