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 * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.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 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Wł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.
Wyzwanie
ŁatwyUzupełnij klasę Temperature w pliku temperature.gd. Przechowuje ona jedną wartość, celsius, i oblicza na jej podstawie pozostałe skale:
fahrenheit: getter zwracacelsius * 9 / 5 + 32, a setter zapisuje(value - 32) * 5 / 9wcelsiuskelvin: właściwość tylko do odczytu, której getter zwracacelsius + 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 KTwó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])
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online