פונקציות אנונימיות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאים3מושגים מתקדמים בפונקציות
החזרת ערכים מרוביםפונקציות עם מספר משתנה של ארגומנטים (...)פונקציות כערכים ממדרגה ראשונהפונקציות אנונימיותמהי סגירה (Closure)?סיכום – מטפל אירועים פשוטתרגלו בעצמכם: קומפיילר Lua אונליין