الدوال كقيم من الدرجة الأولى
جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 12 من 54.
في لغة Lua، تُعد الدوال أكثر من مجرد كتل برمجية تؤدي مهامًا—فهي قيم يمكن التعامل معها مثل أي نوع بيانات آخر. هذا يعني أنه يمكنك العمل مع الدوال بنفس الطريقة التي تعمل بها مع الأرقام أو النصوص أو الجداول.
يمكنك تخزين دالة في متغير:
local greet = function()
print("Hello!")
end
greet() -- المخرجات: Hello!هنا، يتم تعيين الدالة للمتغير greet، ويمكنك استدعاؤها تماماً مثل أي دالة عادية. هذا يفتح إمكانيات قوية لكيفية هيكلة الكود الخاص بك.
يمكن أيضاً تمرير الدوال كوسطاء (arguments) لدوال أخرى. هذا مفيد بشكل خاص عندما تريد أن تستخدم دالة واحدة السلوك المحدد في دالة أخرى:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- المخرجات: Hello from a function!في هذا المثال، تستقبل executeAction دالة كمعامل لها وتقوم باستدعائها. يتم تمرير الدالة sayHello تماماً كما تمرر رقماً أو سلسلة نصية.
يمكن للدوال حتى أن تُرجع دوالاً أخرى. يتيح لك ذلك إنشاء دوال بشكل ديناميكي بناءً على شروط أو معاملات معينة:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- النتيجة: 10التحدي
سهلاكتب دالة applyOperation تأخذ a و b و operation وتعيد نتيجة تطبيق دالة العملية على الرقمين.
المعامل operation هو جدول يحتوي على دالة سيتم استدعاؤها مع a و b كوسطاء.
المنطق:
- استخرج الدالة من جدول
operationباستخدام المفتاح"func" - استدعِ تلك الدالة مع
aوbكوسطاء - أعد النتيجة
المعاملات:
a(رقم): الرقم الأولb(رقم): الرقم الثانيoperation(جدول): جدول يحتوي على دالة مخزنة في المفتاح"func"
المخرجات: نتيجة استدعاء دالة العملية مع a و b (رقم)
ورقة مرجعية
في لغة Lua، تُعد الدوال قيمًا من الدرجة الأولى (first-class values) يمكن تخزينها في متغيرات، وتمريرها كوسائط، وإرجاعها من دوال أخرى.
تخزين دالة في متغير:
local greet = function()
print("Hello!")
end
greet() -- المخرجات: Hello!تمرير دالة كوسيط (argument):
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- المخرجات: Hello from a function!إرجاع دالة من دالة أخرى:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- المخرجات: 10جرّب بنفسك
function applyOperation(a, b, operation)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج3مفاهيم الدوال المتقدمة
إرجاع قيم متعددةالدوال متغيرة الوسائط (...)الدوال كقيم من الدرجة الأولىالدوال المجهولةما هو الـ Closure؟ملخص - معالج أحداث بسيط