Menu
CoddyTech

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 += 1
var 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 Academy

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

challenge icon

Wyzwanie

Łatwy

Uzupełnij klasę BankAccount w pliku bank_account.gd:

  • statyczna zmienna typu int interest_percent, która zaczyna od wartości 2 i jest współdzielona przez wszystkie konta
  • statyczna zmienna typu int account_count, która zaczyna od wartości 0; konstruktor dodaje do niej 1 dla każdego nowego konta
  • describe() zwraca HOLDER: $BALANCE at PERCENT%, używając holder i balance danego konta oraz współdzielonej zmiennej interest_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())
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