Menu
CoddyTech

פונקציות אנונימיות

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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(). כך הקוד קומפקטי יותר, והלוגיקה של המיון נשארת בדיוק במקום שבו משתמשים בה.

challenge icon

אתגר

קל

כתבו פונקציה 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
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Lua אונליין