Menu
Coddy logo textTech

מערכים גנריים

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

challenge icon

אתגר

קל

צרו פונקציה גנרית בשם first ש:

  • מגדירה פרמטר טיפוס T
  • מקבלת פרמטר אחד בשם items מטיפוס {T}
  • מחזירה את האיבר הראשון, עם טיפוס החזרה T? (הערך הוא nil עבור מערך ריק)

צרו את המערכים הטיפוסיים הבאים:

  • fruits מטיפוס {string} עם "apple", "banana", "cherry"
  • scores מטיפוס {number} עם 10, 20, 30, 40
  • flags מטיפוס {boolean} עם false, true
  • empty מטיפוס {string} ללא איברים

הדפיסו את התוצאה של קריאה ל-first עם כל אחד מהמערכים, לפי הסדר הזה, כל אחד בשורה משלו.

נסו בעצמכם

-- כתבו כאן קוד
-- 1) הגדירו first<T>(items: {T}): T? שמחזירה את items[1]
-- 2) צרו fruits: {string}, scores: {number}, flags: {boolean},
--    ומערך ריק מסוג {string}
-- 3) הדפיסו את first(...) של כל מערך, לפי הסדר הזה
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה מבוא ל-Luau

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