Menu
CoddyTech

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 * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.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 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

Theo 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.

challenge icon

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 / 9 vào celsius
  • kelvin: 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 K

Code 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])
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch GDScript online