Self والدوال المسبوقة بنقطتين (Colon Methods)
جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 45 من 80.
تنجح كتابة rect.area(rect)، لكنك تعلمت طريقة أفضل في درس البرمجة كائنية التوجه في Lua: النقطتان. إن rect:area() هو الاستدعاء نفسه تمامًا: تمرر Lua الجدول الذي يسبق النقطتين بوصفه الوسيط الأول، أي self، تلقائيًا.
وتفيد النقطتان أيضًا في موضع التعريف. فالتعليمة 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 صراحةً، في deposit: (self: Account, amount: number) -> ()، مع أن النقطتين تخفيانه في التنفيذ. النقطتان مجرد صياغة مختصرة؛ فالوسيط موجود، ويصرّح به النوع. وتُكتب دالة الأسلوب التي لا تُرجع شيئًا بنوع الإرجاع الفارغ -> ().
يتبع الاستدعاء القاعدة نفسها التي تعرفها بالفعل: account:deposit(250) مطابق لـ account.deposit(account, 250). والسلوك وقت التشغيل هو نفسه كما في فصل البرمجة كائنية التوجه: تضيف Luau الأنواع فحسب.
لاحظ أن account نفسه تُرك بلا تصريح نوع. يصف النوع Account الجدول المكتمل، ولا يطابقه الجدول إلا بعد إرفاق الأسلوبين به؛ لذا فإن كتابة local account: Account = {owner = "Maya", balance = 1500} ستجعل الوضع الصارم يبلغ عن الأسلوبين المفقودين.
التحدي
سهلأضِف طريقتين إلى حساب باستخدام صيغة النقطتين.
- أسفل الجدول، عرّف
function account:deposit(amount: number)بحيث تضيفamountإلىself.balance. - عرّف
function account:getBalance(): numberبحيث تُعيدself.balance. - اطبع
account:getBalance()، واستدعِaccount:deposit(120)، ثم اطبعaccount:getBalance()مرة أخرى.
اضغط على Run Code: يُظهر الناتج 300، ثم 420.
جرّب بنفسك
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) اطبع الرصيد، وأودع 120، ثم اطبعه مرة أخرى
جميع دروس مقدمة إلى Luau
1البدء مع Luau
ما هي Luau؟لماذا نستخدم Luau؟أول كود لك بلغة Luauفحص الأنواع وأنماط الأخطاءملخص: مقدمة إلى Luau4العمل مع الدوال
تحديد أنواع المعاملات والقيم المُعادةتحديد أنواع الدوال المجهولةالدوال التي لا تُعيد قيمةالمعاملات الاختياريةالقيم الافتراضية للمعاملاتالقيم الافتراضية للمنطقيةالدوال ذات المعاملات المتغيرةتعريف أنواع الدوالمراجعة: الدوال ذات الأنواع المحددة2الأنواع الأساسية
الأعداد والسلاسل النصية والقيم المنطقيةالنوع 'any': مخرج عند الضرورةالنوع 'unknown'الأنواع الخالية والاختياريةاستدلال الأنواع عمليًاالتصريحات الصريحة للأنواعمراجعة: تدريب على الأنواع الأساسية5الأسماء المستعارة، الأنواع المشتركة، والأنواع المتقاطعة
الأسماء المستعارة للأنواع الأوليةأنواع الاتحاد (Union Types)التعامل مع أنواع الاتحادالأنواع اللفظية (Literal Types)أنواع التقاطع (Intersection Types)دمج الأسماء المستعارة للأنواعملخص: تجميعات الأنواع المتقدمة3الجداول محددة الأنواع: المصفوفات والخرائط
المصفوفات محددة الأنواعإضافة العناصر وقراءتهاما نوع Map؟تعريف الخرائط والوصول إليهاالتكرار عبر الجداولالجداول ذات البُنى المختلطةقراءة شبكةإنشاء شبكةtable.unpackمراجعة: المصفوفات والخرائط6تحديد أشكال الجداول (Typing Table Shapes)
توضيحات أشكال الجداول المضمنةأسماء مستعارة للأنواع لأشكال الجداولالخصائص الاختياريةأشكال الجداول مقابل الجداول الحرةتوسيع أشكال الجداولإضافة الدوارل إلى أشكال الجداولSelf والدوال المسبوقة بنقطتين (Colon Methods)ملخص: تعريف أشكال الجداول9الأنواع المعممة (Generics): نظرة أولى
المشكلة التي تحلها الأنواع المعممةدالة هوية معممةاستخدام دالة معممةالمصفوفات المعممةأسماء مستعارة للأنواع المعممةملخص: الدوال المعممةتدرّب بنفسك: مترجم Luau عبر الإنترنت