הגדרת טיפוסים לפונקציות אנונימיות
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 23 מתוך 73.
ב-Lua, פונקציות הן ערכים: אחסנת אותן במשתנים והעברת אותן הלאה: local f = function(x) return x * 2 end. לפונקציות האנונימיות האלה (ביטויי פונקציה) יש בדיוק אותן הערות טיפוסים כמו לפונקציות בעלות שם:
local double = function(x: number): number
return x * 2
end
local shout = function(text: string): string
return string.upper(text) .. "!"
endהפרמטרים מקבלים name: type בתוך הסוגריים, וסוג הערך המוחזר מופיע אחרי הסוגריים הסוגרים: ההבדל היחיד מפונקציה בעלת שם הוא שלמילת המפתח function אין שם, וכל הביטוי מוקצה למשתנה.
אם התנסית ב-JavaScript או ב-TypeScript, שים לב של-Luau אין פונקציות חץ. אין תחביר של =>. כל ביטוי פונקציה נכתב בצורה function ... end, בין שהוא ארוך ובין שהוא קצר.
לאחר שמקצים אותן, קוראים להן דרך המשתנה כמו לכל פונקציה: double(21) מחזירה 42, והבודק מוודא שכל קריאה תואמת להערות שכתבת.
אתגר
קלכתבו מחדש את הפונקציה בעלת השם הזו כפונקציה אנונימית המאוחסנת במשתנה מקומי, תוך שמירה על כל הערות הטיפוס:
function subtract(a: number, b: number): number
return a - b
endכלומר: צרו local subtract = function(...) ... end עם אותם טיפוסים של הפרמטרים ושל ערך ההחזרה.
לאחר מכן צרו שתי פונקציות אנונימיות מטיפוסות נוספות:
createMessage: מקבלתtext: string, מחזירה את המחרוזת"Message: [text]"(טיפוס ההחזרהstring)isPositive: מקבלתnum: number, מחזירהtrueאם המספר גדול מ־0, אחרתfalse(טיפוס ההחזרהboolean)
קראו להן והדפיסו את התוצאה, כל אחת בשורה נפרדת:
subtract(10, 3)createMessage("Hello World")isPositive(-5)isPositive(8)
נסו בעצמכם
-- כתבו את הקוד כאן
-- local subtract = function(a: number, b: number): number ... end
-- local createMessage = function(text: string): string ... end
-- local isPositive = function(num: number): boolean ... end
-- לאחר מכן הדפיסו את ארבע התוצאות
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפותתרגלו בעצמכם: קומפיילר Luau אונליין