Menu
CoddyTech

הצהרות טיפוס

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

כבר השתמשת פעם אחת ב־::, בפרק על טיפוסי enum, כדי להתייחס אל io.read() כאל Direction. בשיעור הזה נבחן אותו לעומק.

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

type User = {id: number, username: string}

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- בודק הטיפוסים מכיר עכשיו את השדות

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

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

challenge icon

אתגר

קל

קרא רשומה שמגיעה מטיפוס any.

  1. כתוב type User = {id: number, username: string, isActive: boolean}.
  2. כתוב local function describeUser(data: any): string שמבצעת המרה באמצעות local user = data :: User ומחזירה את `User {user.id}: {user.username} (Active: {user.isActive})`.
  3. הדפס את describeUser(rawUser2).

לחץ על הרצת הקוד: הפלט מציג את User 15: bob_admin (Active: false).

נסו בעצמכם

-- רשומות גולמיות מחוץ לתוכנית: מטיפוס any
local rawUser1: any = {id = 7, username = "nina_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}

-- 1) type User = {...}
-- 2) describeUser(data: any): string, המרת טיפוס באמצעות ::
-- 3) הדפיסו את describeUser(rawUser2)

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

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