Menu
CoddyTech

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 += 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

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

challenge icon

Tantangan

Mudah

Lengkapi class BankAccount di bank_account.gd:

  • variabel int static interest_percent yang dimulai dari 2, digunakan bersama oleh semua akun
  • variabel int static account_count yang dimulai dari 0; constructor menambahkan 1 untuk setiap akun baru
  • describe() mengembalikan HOLDER: $BALANCE at PERCENT%, menggunakan holder dan balance akun tersebut serta interest_percent yang 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())
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online