Menu
CoddyTech

Gettery właściwości

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 12 z 65.

Blok get:, czyli getter właściwości, uruchamia się za każdym razem, gdy odczytywana jest właściwość, a zwracana przez niego wartość jest wartością otrzymywaną przez odczytującego. Użyj go dla wartości obliczanej na podstawie innych właściwości:

# 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 odczytuje się jak zmienną, bez nawiasów, ale jest obliczane ponownie przy każdym odczycie, więc zawsze odpowiada aktualnej szerokości i wysokości.

Właściwość może mieć oba bloki. Tutaj fahrenheit tylko przelicza: odczytanie jej przelicza wartość z celsius, a przypisanie do niej przelicza ją z powrotem i zapisuje wynik w 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

Właściwość zawierająca tylko get: jest z założenia tylko do odczytu. Przypisanie do niej nie jest błędem, ale getter ignoruje przypisaną wartość: po r.area = 100 r.area nadal zwraca 30.

challenge icon

Wyzwanie

Łatwy

Uzupełnij klasę Temperature w pliku temperature.gd. Przechowuje ona jedną wartość, celsius, i oblicza na jej podstawie pozostałe skale:

  • fahrenheit: getter zwraca celsius * 9 / 5 + 32, a setter zapisuje (value - 32) * 5 / 9 w celsius
  • kelvin: właściwość tylko do odczytu, której getter zwraca celsius + 273.15

Dostarczony kod odczytuje liczbę kolejnych poleceń, a następnie po jednym w każdym wierszu: c VALUE ustawia celsius, a f VALUE ustawia fahrenheit. Po każdym poleceniu wypisuje trzy właściwości z dokładnością do dwóch miejsc po przecinku. Dla c 25, f 98.6 i c -40 wypisuje:

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

Twój kod umieść w pliku temperature.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

extends Node

func _ready():
	# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
	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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online