פונקציות אנונימיות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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 ומחזירה טבלה חדשה שמכילה רק מספרים הגדולים מהסף.
השתמשו ב-table.insert() ובגישה של פונקציה אנונימית כדי לסנן את המספרים. צרו את לוגיקת הסינון באופן מקומי, בלי להגדיר פונקציה נפרדת בעלת שם.
לוגיקה:
- צרו טבלת תוצאות ריקה
- עברו על המספרים שבטבלה
- עבור כל מספר, השתמשו בפונקציה אנונימית כדי לבדוק אם הוא גדול מהסף
- אם הבדיקה מחזירה true, הוסיפו את המספר לטבלת התוצאות
- החזירו את טבלת התוצאות המסוננת
פרמטרים:
numbers(טבלה): טבלה בסגנון רשימה שמכילה ערכים מספרייםthreshold(מספר): הערך המינימלי (לא כולל) לסינון
ערך מוחזר: טבלה שמכילה רק מספרים הגדולים מהסף (טבלה)
נסו בעצמכם
function filterByThreshold(numbers, threshold)
-- כתבו כאן קוד
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאים3מושגים מתקדמים בפונקציות
החזרת ערכים מרוביםפונקציות עם מספר משתנה של ארגומנטים (...)פונקציות כערכים ממדרגה ראשונהפונקציות אנונימיותמהי סגירה (Closure)?סיכום – מטפל אירועים פשוטתרגלו בעצמכם: קומפיילר Lua אונליין