Menu
CoddyTech

Örnek ve Statik Değişkenler

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 9 / 65.

Sınıftaki normal bir var, bir örnek değişkenidir: her nesnenin kendine ait bir değeri vardır. Bir static var ise sınıfa aittir: tek bir değer vardır ve bu değer tüm nesneler tarafından paylaşılır.

# 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

Nesneye gerek duymadan, Student.count örneğindeki gibi sınıf adını kullanarak statik bir değişkeni okuyun. Sınıfın içinde kendi adını kullanın: _init() içindeki count += 1, şimdiye kadar oluşturulan her öğrenciyi sayar.

Student.school değerini değiştirmek, bunu tüm öğrenciler için aynı anda değiştirir. Yalnızca bir tane school olduğu için ada.school = "Night School" da aynı şeyi yapar; sınıf adını yazmak bunu açıkça gösterir.

Bir const da aynı şekilde paylaşılır ancak asla değiştirilemez. Program çalışırken değişen paylaşılan veriler için, örneğin bir sayaç veya tüm nesnelerin uyguladığı bir ayar için static var kullanın.

challenge icon

Görev

Kolay

bank_account.gd dosyasındaki BankAccount sınıfını tamamla:

  • 2 ile başlayan ve tüm hesaplar tarafından paylaşılan statik bir int değişkeni olan interest_percent
  • 0 ile başlayan statik bir int değişkeni olan account_count; kurucu, oluşturulan her yeni hesap için bu değişkene 1 ekler
  • describe(), hesabın holder ve balance değerlerini ve paylaşılan interest_percent değerini kullanarak HOLDER: $BALANCE at PERCENT% değerini döndürür

Sağlanan kod, kaç hesabın geleceğini ve her hesap için bir holder balance satırını, ardından da yeni bir faiz oranını okur. BankAccount.account_count değerini ve her hesabı yazdırır, BankAccount.interest_percent değerini yeni orana ayarlar ve ardından her hesabı tekrar yazdırır. Alice 1000, Bob 2000 ve 3 faiz oranı için şu çıktıyı verir:

Accounts opened: 2
Alice: $1000 at 2%
Bob: $2000 at 2%
After the rate change:
Alice: $1000 at 3%
Bob: $2000 at 3%

Kodunu bank_account.gd dosyasına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
	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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi