מתודות ו־self
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 3 מתוך 57.
בתוך מתודה, self הוא המופע שעליו נקראה המתודה. self.count ו-count מציינים את אותו מאפיין, ולכן בדרך כלל משמיטים את self:
class Counter {
var count = 0
func increment() {
self.count += 1
}
}
let c = Counter()
c.increment()
print(c.count)פלט:
1יש צורך ב־self כאשר לפרמטר ולמאפיין יש אותו שם. במקרה כזה, השם לבדו מציין את הפרמטר, ו־self.name מציין את המאפיין:
class Player {
var name = "unknown"
func rename(name: String) {
self.name = name
}
}
let p = Player()
p.rename(name: "Ada")
print(p.name)פלט:
Adaמתודות יכולות לקרוא למתודות אחרות של אותו מופע, וכך לשמור על כל מתודה קטנה:
class Cart {
var total = 0
func add(_ price: Int) {
total += price
}
func addTwice(_ price: Int) {
add(price)
add(price)
}
}
let cart = Cart()
cart.addTwice(5)
print(cart.total)פלט:
10מתודה יכולה גם להחזיר ערך שחושב מתוך המאפיינים. כאן isEmpty() משיבה על שאלה לגבי המופע בלי לשנות אותו:
class Cart {
var items: [String] = []
func add(_ item: String) {
items.append(item)
}
func isEmpty() -> Bool {
items.count == 0
}
}
let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())פלט:
true
falseאתגר
קלהשלימו את המחלקה Thermostat. setTarget(target:) שומרת את הפרמטר במאפיין target (השתמשו ב-self), warmer() מעלה את היעד ב-1, ו-display() מחזירה target: 21.
הקוד שסופק קורא יעד התחלתי ורשימת פקודות (warmer או set <n>), מחיל אותן ומדפיס display() בסוף.
הקוד שלכם יופיע ב-Thermostat.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
// קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
תרגלו בעצמכם: Swift אונליין