الدوال المجهولة
جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy. الدرس 13 من 54.
بعد أن فهمت أنه يمكن تخزين الدوال في متغيرات وتمريرها، هناك طريقة أكثر اختصارًا لكتابتها. بدلًا من إعطاء الدالة اسمًا دائمًا، يمكنك إنشاؤها مباشرةً في المكان الذي تحتاج إليها فيه. تُسمّى هذه الدوال المجهولة.
الدالة المجهولة هي ببساطة دالة بلا اسم. تعرّفها باستخدام الكلمة المفتاحية function متبوعةً مباشرةً بمعاملاتها وجسمها:
function(a, b)
return a + b
endينشئ هذا قيمة دالة يمكن استخدامها فورًا. تكون الدوال المجهولة مفيدة بشكل خاص عند تمرير الدوال كوسائط إلى دوال أخرى. هل تتذكر مثال الترتيب المخصص من قبل؟ هكذا يبدو باستخدام دالة مجهولة:
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 وتُرجع جدولًا جديدًا يحتوي على الأرقام الأكبر من الحدّ.
يتضمن المحرر بالفعل دالة مساعدة، filter(list, keep): تستدعي keep(value) لكل قيمة، وتُرجع جدولًا جديدًا بالقيم التي أعادت فيها keep القيمة true. استدعِ filter ومرّر شرط التحقق على هيئة دالة مجهولة مكتوبة مباشرةً داخل الاستدعاء، كما يمرّر الدرس دالةً إلى table.sort(). لا تخزّن شرط التحقق في متغير ولا تمنحه اسمًا.
المعاملات:
numbers(table): جدول بأسلوب القائمة يحتوي على قيم رقميةthreshold(number): الحد الأدنى للقيمة (غير شامل) للتصفية
القيمة المُعادة: جدول يحتوي فقط على الأرقام الأكبر من الحدّ (table)
جرّب بنفسك
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتحكم في التدفق
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج3مفاهيم الدوال المتقدمة
إرجاع قيم متعددةالدوال متغيرة الوسائط (...)الدوال كقيم من الدرجة الأولىالدوال المجهولةما هو الـ Closure؟ملخص - معالج أحداث بسيطتدرّب بنفسك: مترجم Lua عبر الإنترنت