מערכים גנריים
חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 60 מתוך 73.
גנריים נעשים שימושיים מאוד כשעובדים עם טבלאות. כבר כתבת מערכים מטויפסים כמו {number} או {string}. בתוך פונקציה גנרית, טיפוס האיבר יכול להיות פשוט T, ו-{T} פירושו "מערך של כל מה שיתברר להיות T".
הנה הדוגמה הקלאסית: שליפת האיבר הראשון מכל מערך:
local function first<T>(items: {T}): T?
return items[1]
endהעבירו {string}, ובודק הטיפוסים מסיק T = string, כך שהתוצאה היא מחרוזת. העבירו {number}, והתוצאה היא מספר. פונקציה אחת מחליפה משפחה שלמה של עותקים ייעודיים לכל טיפוס.
שימו לב היטב לטיפוס ההחזרה: הוא T?, ולא T. מערך יכול להיות ריק, ואז items[1] הוא nil: הטיפוס האופציונלי שפגשתם קודם מציין זאת במפורש: "T, או nil". בודק הטיפוסים יכוון את מי שקוראים לפונקציה לטפל במקרה של nil לפני השימוש בתוצאה, וזה בדיוק סוג איתור הבאגים שרוצים לקבל משפה מטויפסת.
אתגר
קלצרו פונקציה גנרית בשם first ש:
- מגדירה פרמטר טיפוס
T - מקבלת פרמטר אחד בשם
itemsמטיפוס{T} - מחזירה את האיבר הראשון, עם טיפוס החזרה
T?(הערך הואnilעבור מערך ריק)
צרו את המערכים הטיפוסיים הבאים:
fruitsמטיפוס{string}עם"apple","banana","cherry"scoresמטיפוס{number}עם10,20,30,40flagsמטיפוס{boolean}עםfalse,trueemptyמטיפוס{string}ללא איברים
הדפיסו את התוצאה של קריאה ל-first עם כל אחד מהמערכים, לפי הסדר הזה, כל אחד בשורה משלו.
נסו בעצמכם
-- כתבו כאן קוד
-- 1) הגדירו first<T>(items: {T}): T? שמחזירה את items[1]
-- 2) צרו fruits: {string}, scores: {number}, flags: {boolean},
-- ומערך ריק מסוג {string}
-- 3) הדפיסו את first(...) של כל מערך, לפי הסדר הזה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
טיפוסים בסיסיים: num, str, boolהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוסים מפורשותסיכום: תרגול טיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספת איברים וקריאתםמהו טיפוס Map?הצהרה על מפות וגישה אליהןמעבר על טבלאותטבלאות בעלות מבנים מעורביםמערכים רב־ממדיים מטיפוס מוגדרtable.unpack ו־Varargsסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלה9מבט ראשון על טיפוסים גנריים
הבעיה שטיפוסים גנריים פותריםפונקציית זהות גנריתשימוש בפונקציה גנריתמערכים גנרייםכינויי טיפוס גנרייםסיכום: פונקציות גנריותתרגלו בעצמכם: קומפיילר Luau אונליין