Zmienne instancji a zmienne statyczne
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 9 z 65.
Standardowa var w klasie to zmienna instancji: każdy obiekt ma własną. static var należy zamiast tego do klasy: istnieje jedna wartość współdzielona przez wszystkie obiekty.
# student.gd
class_name Student
extends RefCounted
static var school: String = "Godot High"
static var count: int = 0
var student_name: String
func _init(new_name: String) -> void:
student_name = new_name
count += 1var ada := Student.new("Ada")
var bo := Student.new("Bo")
print(Student.count) # 2
print(ada.student_name, " and ", bo.student_name) # Ada and Bo
Student.school = "Godot Academy"
print(ada.school) # Godot Academy
print(bo.school) # Godot AcademyOdczytuj zmienną statyczną za pomocą nazwy klasy, tak jak w przypadku Student.count, bez potrzeby tworzenia obiektu. Wewnątrz klasy użyj jej nazwy: count += 1 w _init() zlicza wszystkich dotychczas utworzonych uczniów.
Zmiana Student.school zmienia ją jednocześnie dla wszystkich uczniów. ada.school = "Night School" zrobiłoby to samo, ponieważ istnieje tylko jedno school; użycie nazwy klasy jasno to pokazuje.
Stała const jest współdzielona w ten sam sposób, ale nigdy nie może się zmienić. Użyj static var do przechowywania współdzielonych danych, które zmieniają się podczas działania programu, takich jak licznik lub ustawienie, którego przestrzegają wszystkie obiekty.
Wyzwanie
ŁatwyUzupełnij klasę BankAccount w pliku bank_account.gd:
- statyczna zmienna typu
intinterest_percent, która zaczyna od wartości2i jest współdzielona przez wszystkie konta - statyczna zmienna typu
intaccount_count, która zaczyna od wartości0; konstruktor dodaje do niej1dla każdego nowego konta describe()zwracaHOLDER: $BALANCE at PERCENT%, używającholderibalancedanego konta oraz współdzielonej zmiennejinterest_percent
Dostarczony kod odczytuje liczbę kolejnych kont i po jednym wierszu holder balance dla każdego z nich, a następnie nową stopę procentową. Wypisuje BankAccount.account_count i każde konto, ustawia BankAccount.interest_percent na nową wartość i ponownie wypisuje każde konto. Dla Alice 1000, Bob 2000 i stopy 3 wypisuje:
Accounts opened: 2
Alice: $1000 at 2%
Bob: $2000 at 2%
After the rate change:
Alice: $1000 at 3%
Bob: $2000 at 3%Umieść swój kod w pliku bank_account.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 accounts: Array[BankAccount] = []
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
accounts.append(BankAccount.new(parts[0], int(parts[1])))
print("Accounts opened: %d" % BankAccount.account_count)
for account in accounts:
print(account.describe())
BankAccount.interest_percent = int(OS.read_string_from_stdin())
print("After the rate change:")
for account in accounts:
print(account.describe())
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