الدوال المجهولة
جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 13 من 54.
الآن بعد أن فهمت أنه يمكن تخزين الدوال في متغيرات وتمريرها، هناك طريقة أكثر إيجازاً لكتابتها. بدلاً من إعطاء الدالة اسماً دائماً، يمكنك إنشاؤها مباشرة حيث تحتاج إليها - وتسمى هذه بالدوال المجهولة (anonymous functions).
الدالة المجهولة (anonymous function) هي ببساطة دالة بدون اسم. يمكنك تعريفها باستخدام الكلمة المفتاحية function متبوعة مباشرة بمعاملاتها وجسم الدالة:
function(a, b)
return a + b
endيؤدي هذا إلى إنشاء قيمة دالة يمكن استخدامها على الفور. تعد الدوال المجهولة (Anonymous functions) مفيدة بشكل خاص عند تمرير الدوال كوسيطات (arguments) إلى دوال أخرى. هل تتذكر مثال الفرز المخصص من وقت سابق؟ إليك كيف يبدو الأمر باستخدام دالة مجهولة:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)بدلاً من تعريف دالة منفصلة ومسماة للمقارنة، يتم إنشاء الدالة مباشرة كمعامل ثانٍ لـ table.sort(). هذا يجعل الكود أكثر إيجازاً ويحافظ على منطق الفرز في مكان استخدامه.
التحدي
سهلاكتب دالة filterByThreshold تأخذ numbers و threshold وتعيد جدولاً جديداً يحتوي فقط على الأرقام الأكبر من العتبة (threshold).
استخدم table.insert() مع نهج الدالة المجهولة (anonymous function) لتصفية الأرقام. قم بإنشاء منطق التصفية بشكل مضمن (inline) دون تعريف دالة منفصلة مسماة.
المنطق:
- إنشاء جدول نتائج فارغ
- التكرار عبر جدول الأرقام
- لكل رقم، استخدم دالة مجهولة للتحقق مما إذا كان يتجاوز العتبة
- إذا أرجع التحقق قيمة true، أضف الرقم إلى جدول النتائج
- إرجاع جدول النتائج المصفى
المعاملات:
numbers(table): جدول بنمط قائمة يحتوي على قيم عدديةthreshold(number): القيمة الدنيا (غير شاملة) للتصفية
المخرجات: جدول يحتوي فقط على الأرقام الأكبر من العتبة (table)
ورقة مرجعية
الـ دالة المجهولة (anonymous function) هي دالة بدون اسم، تُعرّف باستخدام الكلمة المفتاحية function متبوعة بالمعاملات والجسم:
function(a, b)
return a + b
endتُعد الدوال المجهولة مفيدة عند تمرير الدوال كوسطاء (arguments)، مما يبقي المنطق في نفس السطر الذي يُستخدم فيه:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)يؤدي هذا إلى إنشاء دالة المقارنة مباشرة كـ argument لـ table.sort()، مما يجعل الكود أكثر إيجازاً.
جرّب بنفسك
function filterByThreshold(numbers, threshold)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج3مفاهيم الدوال المتقدمة
إرجاع قيم متعددةالدوال متغيرة الوسائط (...)الدوال كقيم من الدرجة الأولىالدوال المجهولةما هو الـ Closure؟ملخص - معالج أحداث بسيط