Menu
CoddyTech

הבעיה שטיפוסים גנריים פותרים

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 61 מתוך 80.

דמיינו שאתם זקוקים לפונקציה שפשוט מחזירה כל ערך שמעבירים לה: פונקציית זהות. עם הטיפוסים שאתם מכירים עד כה, יש לכם שתי אפשרויות, ושתיהן גרועות.

אפשרות אחת: לכתוב עותק נפרד לכל טיפוס. גופי הפונקציות זהים; רק ההערות שונות:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

כל טיפוס חדש פירושו עותק נוסף, ובאג שתוקן באחד מהם צריך לתקן בכולם. זו בדיוק הכפילות שכתיבת פונקציות נועדה למנוע.

אפשרות שתיים: לאחד אותם לפונקציה אחת עם טיפוס any:

local function echo(value: any): any
    return value
end

עכשיו פונקציה אחת מטפלת בהכול, אבל המחיר הוא בטיחות הטיפוסים. כשקוראים ל־echo("hello"), הבודק כבר לא יודע שהתוצאה היא מחרוזת. הוא יודע רק שמדובר ב־any, לכן ההשלמה האוטומטית נעלמת ושגיאות טיפוסים חומקות: הקשר בין מה שנכנס לבין מה שיוצא אובד.

מה שאתם באמת רוצים הוא פונקציה שעובדת עם כל טיפוס וגם זוכרת באיזה טיפוס השתמשה כל קריאה. זה בדיוק מה שטיפוסים גנריים מספקים, והם נושא הפרק הזה.

challenge icon

אתגר

קל

ראו מה גרסת any של echo שוכחת.

  1. כתבו local function echo(value: any): any שמחזירה את value.
  2. שמרו את echo("hello") בתוך local result.
  3. הדפיסו את result, ואז את typeof(result).

לחצו על הרצת קוד: הפלט מציג את hello ואת string.

נסו בעצמכם

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) הדפיסו את result ואת typeof(result)

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

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