الدوال كقيم من الدرجة الأولى
جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy. الدرس 12 من 54.
في Lua، الدوال أكثر من مجرد كتل من التعليمات البرمجية التي تنفّذ مهامًا. فهي قيم يمكن التعامل معها مثل أي نوع بيانات آخر. وهذا يعني أنه يمكنك العمل مع الدوال بالطريقة نفسها التي تعمل بها مع الأرقام أو السلاسل النصية أو الجداول.
يمكنك تخزين دالة في متغير:
local greet = function()
print("Hello!")
end
greet() -- المخرجات: Hello!هنا، تُسنَد الدالة إلى المتغير greet، ويمكنك استدعاؤها تمامًا مثل أي دالة عادية. وهذا يتيح إمكانيات قوية لكيفية تنظيم التعليمات البرمجية.
يمكن أيضًا تمرير الدوال كوسائط إلى دوال أخرى. ويكون هذا مفيدًا بشكل خاص عندما تريد أن تستخدم إحدى الدوال السلوك المُعرَّف في دالة أخرى:
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التحدي
سهلاكتب function باسم applyOperation تأخذ a وb وoperation وتُرجع نتيجة تطبيق function العملية على العددين.
المعامل operation هو جدول يحتوي على function سيتم استدعاؤها باستخدام a وb كوسيطين.
المنطق:
- استخرج function من جدول
operationباستخدام المفتاح"func" - استدعِ تلك function باستخدام
aوbكوسيطين - أرجِع النتيجة
المعاملات:
a(number): العدد الأولb(number): العدد الثانيoperation(table): جدول يحتوي على function مخزنة في المفتاح"func"
القيمة المُرجعة: نتيجة استدعاء function العملية باستخدام a وb (number)
جرّب بنفسك
function applyOperation(a, b, operation)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتحكم في التدفق
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج3مفاهيم الدوال المتقدمة
إرجاع قيم متعددةالدوال متغيرة الوسائط (...)الدوال كقيم من الدرجة الأولىالدوال المجهولةما هو الـ Closure؟ملخص - معالج أحداث بسيطتدرّب بنفسك: مترجم Lua عبر الإنترنت