Menu
Coddy logo textTech

מטא־מתודות אריתמטיות חלק 2

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 22 מתוך 54.

בהמשך לחיבור ולחיסור, אפשר גם להגדיר התנהגות של כפל וחילוק עבור הטבלאות שלך באמצעות המתודות __mul ו־__div. הן פועלות באותו אופן כמו __add ו־__sub, אך מגיבות לאופרטורים * ו־/.

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

local vector = {x = 3, y = 4}

local meta = {
    __mul = function(a, b)
        local scalar = type(a) == "number" and a or b
        local vec = type(a) == "table" and a or b
        return {x = vec.x * scalar, y = vec.y * scalar}
    end
}

setmetatable(vector, meta)

local scaled = vector * 2
print(scaled.x, scaled.y)  -- פלט: 6  8

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

מתודת המטא __div פועלת באופן דומה לחלוקה:

local meta = {
    __div = function(a, b)
        return {x = a.x / b, y = a.y / b}
    end
}

setmetatable(vector, meta)

local divided = vector / 2
print(divided.x, divided.y)  -- פלט: 1.5  2

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

challenge icon

אתגר

קל

כתבו פונקציה scaleVector שמקבלת את x, את y ואת scalar, ומחזירה את הווקטור המוכפל בסקלר כמחרוזת בפורמט מסוים.

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

לוגיקה:

  • צרו טבלת וקטור עם המפתחות x ו-y שמוגדרים לקואורדינטות שסופקו
  • צרו מטאטבלה עם __mul שמטפלת בכפל בין וקטור לסקלר
  • הפונקציה __mul צריכה לבדוק איזה אופרנד הוא המספר ואיזה הוא הטבלה
  • החזירו טבלה חדשה עם x = vec.x * scalar ו-y = vec.y * scalar
  • צרפו את המטאטבלה לטבלת הווקטור באמצעות setmetatable()
  • הכפילו את הווקטור בסקלר באמצעות vector * scalar
  • החזירו את התוצאה כמחרוזת בפורמט "x y" (ערכי x ו-y מופרדים ברווח)

פרמטרים:

  • x (number): קואורדינטת ה-x של הווקטור
  • y (number): קואורדינטת ה-y של הווקטור
  • scalar (number): ערך הסקלר שבו יש להכפיל את הווקטור

ערך מוחזר: הווקטור המוכפל בסקלר כמחרוזת בפורמט "x y" (מחרוזת)

נסו בעצמכם

function scaleVector(x, y, scalar)
    -- כתבו כאן קוד
end
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

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