Menu
Coddy logo textTech

תחביר הנקודתיים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 3 מתוך 70.

לכתוב counter.increment(counter) בכל פעם זה מייגע ומועד לטעויות. Lua מספקת דרך נקייה יותר: האופרטור נקודתיים (:).

כשמגדירים פונקציה באמצעות נקודתיים, Lua מוסיפה אוטומטית את self כפרמטר הראשון:

local player = {
    name = "Hero"
}

-- שימוש בנקודתיים בהגדרה
function player:greet()
    print("Hello, I am " .. self.name)
end

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

player:greet()  -- פלט: Hello, I am Hero

זה שקול לכתיבה של player.greet(player), אבל הרבה יותר נקי. הנקודתיים מטפלים בפרמטר self בשני הקצוות: בזמן ההגדרה ובזמן הקריאה.

הנה השוואה שמראה ששתי הגישות מניבות תוצאות זהות:

local counter = { value = 0 }

-- תחביר נקודה (self מפורש)
function counter.increment(self)
    self.value = self.value + 1
end
counter.increment(counter)

-- תחביר נקודתיים (self אוטומטי)
function counter:decrement()
    self.value = self.value - 1
end
counter:decrement()
challenge icon

אתגר

קל

צרו טבלה בשם greeter עם שדה message שמאותחל לערך שתקבלו כקלט.

הוסיפו מתודה :sayHello(name) באמצעות תחביר הנקודתיים, שמדפיסה את הברכה בפורמט הזה:

[message], [name]!

תקבלו שני קלטים:

  1. הודעת הברכה שיש לשמור ב-greeter.message
  2. שם להעביר למתודה :sayHello()

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

לדוגמה, אם ההודעה היא Welcome והשם הוא Luna, הפלט צריך להיות:

Welcome, Luna!

נסו בעצמכם

-- קרא את הקלט
local message = io.read()
local name = io.read()

-- TODO: כתוב את הקוד שלך למטה
-- 1. צור טבלה בשם 'greeter' עם שדה 'message'
-- 2. הוסף מתודה :sayHello(name) באמצעות תחביר נקודתיים
-- 3. קרא למתודה באמצעות תחביר נקודתיים כדי להדפיס את הברכה
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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