הבעיה שטיפוסים גנריים פותרים
חלק מהיחידה מבוא ל-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, לכן ההשלמה האוטומטית נעלמת ושגיאות טיפוסים חומקות: הקשר בין מה שנכנס לבין מה שיוצא אובד.
מה שאתם באמת רוצים הוא פונקציה שעובדת עם כל טיפוס וגם זוכרת באיזה טיפוס השתמשה כל קריאה. זה בדיוק מה שטיפוסים גנריים מספקים, והם נושא הפרק הזה.
אתגר
קלראו מה גרסת any של echo שוכחת.
- כתבו
local function echo(value: any): anyשמחזירה אתvalue. - שמרו את
echo("hello")בתוךlocal result. - הדפיסו את
result, ואז אתtypeof(result).
לחצו על הרצת קוד: הפלט מציג את hello ואת string.
נסו בעצמכם
-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) הדפיסו את result ואת typeof(result)
כל השיעורים ביחידה מבוא ל-Luau
1תחילת העבודה עם Luau
מהו Luau?למה להשתמש ב-Luau?קוד Luau הראשון שלכםבדיקת טיפוסים ומצבי שגיאהסיכום: מבוא ל-Luau4עבודה עם פונקציות
הגדרת טיפוסים לפרמטרים ולערכי החזרההגדרת טיפוסים לפונקציות אנונימיותפונקציות שאינן מחזירות ערךפרמטרים אופציונלייםערכי ברירת מחדל לפרמטריםערכי ברירת מחדל לבוליאניםפונקציות עם מספר משתנה של ארגומנטיםהגדרת טיפוסי פונקציותסיכום: פונקציות עם טיפוסים2טיפוסי ליבה
מספר, מחרוזת ובוליאניהטיפוס 'any': פתרון מילוטהטיפוס 'unknown'טיפוסי Nil ואופציונלייםהסקת טיפוסים בפעולההצהרות טיפוס מפורשותסיכום: תרגול בטיפוסי ליבה5כינויים, איחודים וחיתוכים
כינויים לסוגים פרימיטיבייםטיפוסי איחודעבודה עם טיפוסי איחודטיפוסים ליטרלייםטיפוסי חיתוךשילוב כינויים לסוגיםסיכום: שילובים מתקדמים של טיפוסים3טבלאות מטיפוס מוגדר: מערכים ומפות
מערכים מטיפוס מוגדרהוספה וקריאה של איבריםמהו טיפוס Map?הגדרה וגישה למפותמעבר על טבלאותטבלאות במבנים מעורביםקריאת רשתבניית רשתtable.unpackסיכום: מערכים ומפות6הוספת טיפוסים למבני טבלה
הערות טיפוס בשורה למבניםכינויי טיפוס למבניםמאפיינים אופציונלייםמבנים לעומת טבלאות לא מובנותהרחבת מבניםהוספת מתודות למבניםSelf ומתודות עם נקודתייםסיכום: הגדרת מבני טבלה9מבט ראשון על טיפוסים גנריים
הבעיה שטיפוסים גנריים פותריםפונקציית זהות גנריתשימוש בפונקציה גנריתמערכים גנרייםכינויי טיפוס גנרייםסיכום: פונקציות גנריותתרגלו בעצמכם: קומפיילר Luau אונליין