Variabel instance vs. variabel statis
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 9 dari 65.
var biasa di dalam class adalah variabel instance: setiap object memiliki variabelnya sendiri. Sebaliknya, static var menjadi milik class: hanya ada satu nilai yang digunakan bersama oleh setiap object.
# 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 AcademyBaca variabel statis melalui nama class, seperti Student.count, tanpa memerlukan object. Di dalam class, gunakan namanya: count += 1 di _init() menghitung setiap siswa yang telah dibuat sejauh ini.
Mengubah Student.school akan mengubahnya untuk semua siswa sekaligus. ada.school = "Night School" akan melakukan hal yang sama, karena hanya ada satu school; menuliskan nama class memperjelas hal itu.
const dibagikan dengan cara yang sama, tetapi nilainya tidak bisa berubah. Gunakan static var untuk data bersama yang berubah saat program berjalan, seperti penghitung atau pengaturan yang diikuti semua object.
Tantangan
MudahLengkapi class BankAccount di bank_account.gd:
- variabel
intstaticinterest_percentyang dimulai dari2, digunakan bersama oleh semua akun - variabel
intstaticaccount_countyang dimulai dari0; constructor menambahkan1untuk setiap akun baru describe()mengembalikanHOLDER: $BALANCE at PERCENT%, menggunakanholderdanbalanceakun tersebut sertainterest_percentyang digunakan bersama
Kode yang disediakan membaca jumlah akun berikutnya dan satu baris holder balance untuk setiap akun, lalu suku bunga baru. Kode ini mencetak BankAccount.account_count dan setiap akun, mengatur BankAccount.interest_percent ke suku bunga baru, lalu mencetak setiap akun lagi. Untuk Alice 1000, Bob 2000, dan suku bunga 3, kode ini mencetak:
Accounts opened: 2
Alice: $1000 at 2%
Bob: $2000 at 2%
After the rate change:
Alice: $1000 at 3%
Bob: $2000 at 3%Tulis kodemu di bank_account.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan apa adanya
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())
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online