פונקציות כערכים ממדרגה ראשונה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 12 מתוך 54.
ב-Lua, פונקציות הן יותר מסתם בלוקים של קוד שמבצעים משימות. הן ערכים שאפשר להתייחס אליהם כמו לכל סוג נתונים אחר. משמעות הדבר היא שאפשר לעבוד עם פונקציות באותו אופן שבו עובדים עם מספרים, מחרוזות או טבלאות.
אפשר לשמור פונקציה במשתנה:
local greet = function()
print("Hello!")
end
greet() -- פלט: Hello!כאן, הפונקציה משויכת למשתנה greet, ואפשר לקרוא לה בדיוק כמו לכל פונקציה רגילה. כך נפתחות בפניך אפשרויות רבות ועוצמתיות לארגון הקוד שלך.
אפשר גם להעביר פונקציות כארגומנטים לפונקציות אחרות. הדבר שימושי במיוחד כשרוצים שפונקציה אחת תשתמש בהתנהגות שמוגדרת בפונקציה אחרת:
function executeAction(action)
action()
end
local sayHello = function()
print("Hello from a function!")
end
executeAction(sayHello) -- פלט: Hello from a function!בדוגמה הזו, executeAction מקבלת פונקציה כפרמטר וקוראת לה. הפונקציה sayHello מועברת בדיוק כמו שהיית מעביר מספר או מחרוזת.
פונקציות יכולות אפילו להחזיר פונקציות אחרות. כך אפשר ליצור פונקציות באופן דינמי על סמך תנאים או פרמטרים מסוימים:
function createMultiplier(factor)
return function(number)
return number * factor
end
end
local double = createMultiplier(2)
print(double(5)) -- פלט: 10אתגר
קלכתבו פונקציה applyOperation שמקבלת את a, את b ואת operation, ומחזירה את התוצאה של הפעלת פונקציית הפעולה על שני המספרים.
הפרמטר operation הוא טבלה שמכילה פונקציה שתיקרא עם a ועם b כארגומנטים.
לוגיקה:
- חלצו את הפונקציה מטבלת
operationבאמצעות המפתח"func" - קראו לפונקציה עם
aועםbכארגומנטים - החזירו את התוצאה
פרמטרים:
a(מספר): המספר הראשוןb(מספר): המספר השניoperation(טבלה): טבלה שמכילה פונקציה המאוחסנת במפתח"func"
ערך מוחזר: התוצאה של קריאה לפונקציית הפעולה עם a ועם b (מספר)
נסו בעצמכם
function applyOperation(a, b, operation)
-- כתבו כאן את הקוד
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאים3מושגים מתקדמים בפונקציות
החזרת ערכים מרוביםפונקציות עם מספר משתנה של ארגומנטים (...)פונקציות כערכים ממדרגה ראשונהפונקציות אנונימיותמהי סגירה (Closure)?סיכום – מטפל אירועים פשוטתרגלו בעצמכם: קומפיילר Lua אונליין