Phương thức lấy thuộc tính
Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 12 trên 65.
Khối get:, còn gọi là getter của thuộc tính, chạy mỗi khi bạn đọc thuộc tính đó. Giá trị nó trả về chính là giá trị người đọc nhận được. Hãy dùng nó cho giá trị được tính từ các thuộc tính khác:
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.area được đọc như một biến, không có dấu ngoặc đơn, nhưng giá trị này được tính lại mỗi lần đọc, nên luôn khớp với chiều rộng và chiều cao hiện tại.
Một thuộc tính có thể có cả hai khối. Ở đây, fahrenheit chỉ chuyển đổi: đọc thuộc tính này sẽ chuyển đổi từ celsius, còn gán giá trị sẽ chuyển đổi ngược lại và lưu kết quả vào celsius:
# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
get:
return celsius * 9 / 5 + 32
set(value):
celsius = (value - 32) * 5 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Theo quy ước, thuộc tính chỉ có get: là chỉ đọc. Gán giá trị cho thuộc tính này không gây lỗi, nhưng hàm getter bỏ qua giá trị được gán: sau khi gán r.area = 100, r.area vẫn trả về 30.
Thử thách
DễHoàn thiện lớp Temperature trong temperature.gd. Lớp này lưu một giá trị là celsius và tính các thang đo còn lại từ giá trị đó:
fahrenheit: getter trả vềcelsius * 9 / 5 + 32, còn setter lưu(value - 32) * 5 / 9vàocelsiuskelvin: thuộc tính chỉ đọc, getter trả vềcelsius + 273.15
Code được cung cấp đọc số lệnh tiếp theo, sau đó đọc từng lệnh trên một dòng: c VALUE đặt giá trị cho celsius, còn f VALUE đặt giá trị cho fahrenheit. Sau mỗi lệnh, chương trình in ra ba thuộc tính với hai chữ số thập phân. Với c 25, f 98.6 và c -40, chương trình in ra:
25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 KCode của bạn nằm trong temperature.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.
Tự làm thử
extends Node
func _ready():
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
var temp := Temperature.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "c":
temp.celsius = float(parts[1])
else:
temp.fahrenheit = float(parts[1])
print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
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
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa selfPhương thứcThuộc tínhHàm khởi tạo (_init)Ôn tập: máy tính đơn giản4Tính đa hình
Xem lại cách ghi đè phương thứcĐịnh kiểu vịtLớp và phương thức trừu tượngThiết kế interfaceÔn tập: máy tính hình học7Tín hiệu
Tín hiệu là gì?Khai báo và phát tín hiệuKết nối với tín hiệuTín hiệu có đối sốÔn tập: hệ thống sức khỏe10Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổng hợp2Thuộc tính của lớp
Biến instance và biến staticHàm staticPhương thức thiết lập thuộc tínhPhương thức lấy thuộc tínhQuy ước về tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng5Tính đóng gói
Thành viên công khai và riêng tưXác thực bằng phương thức setterẨn thông tinThuộc tính chỉ đọcÔn tập: hệ thống hồ sơ học sinh8Khái niệm OOP nâng cao
Kết hợp và kế thừaLớp bên trongNode dưới dạng thành phầnRefCounted và NodeEnum trong lớpTự luyện tập: Trình biên dịch GDScript online