Phương thức và self
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 3 trên 57.
Bên trong một phương thức, self là đối tượng được gọi phương thức đó. self.count và count có nghĩa là cùng một thuộc tính, vì vậy thường có thể lược bỏ self:
class Counter {
var count = 0
func increment() {
self.count += 1
}
}
let c = Counter()
c.increment()
print(c.count)Đầu ra:
1self cần thiết khi tham số có cùng tên với thuộc tính. Khi đó, tên thông thường chỉ tham số, còn self.name chỉ thuộc tính:
class Player {
var name = "unknown"
func rename(name: String) {
self.name = name
}
}
let p = Player()
p.rename(name: "Ada")
print(p.name)Đầu ra:
AdaCác phương thức có thể gọi những phương thức khác của cùng một đối tượng, nhờ đó mỗi phương thức luôn ngắn gọn:
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)Đầu ra:
10Một phương thức cũng có thể trả về giá trị được tính từ các thuộc tính. Ở đây, isEmpty() trả lời một câu hỏi về instance mà không thay đổi nó:
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())Đầu ra:
true
falseThử thách
DễHoàn thiện lớp Thermostat. setTarget(target:) lưu tham số vào thuộc tính target (dùng self), warmer() tăng giá trị mục tiêu thêm 1 và display() trả về target: 21.
Code được cung cấp đọc giá trị mục tiêu ban đầu và danh sách lệnh (warmer hoặc set <n>), áp dụng chúng rồi in ra display() ở cuối.
Viết code của bạn trong Thermostat.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
// Đoạn code đầu vào/đầu ra đã cho: giữ nguyên
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())
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift