Menu
CoddyTech

Variabili di istanza e statiche

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 9 di 65.

Una var normale in una classe è una variabile di istanza: ogni oggetto ne ha una propria. Una static var appartiene invece alla classe: esiste un solo valore, condiviso da ogni oggetto.

# 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

Leggi una variabile statica tramite il nome della classe, come in Student.count, senza bisogno di un oggetto. All'interno della classe, usa il suo nome: count += 1 in _init() conta ogni studente creato finora.

Modificare Student.school la modifica per tutti gli studenti contemporaneamente. ada.school = "Night School" farebbe lo stesso, perché c'è un solo school; scrivere il nome della classe lo rende chiaro.

Una const è condivisa allo stesso modo, ma non può mai cambiare. Usa una static var per i dati condivisi che cambiano durante l'esecuzione del programma, come un contatore o un'impostazione seguita da tutti gli oggetti.

challenge icon

Sfida

Facile

Completa la classe BankAccount in bank_account.gd:

  • una variabile int statica interest_percent che inizia da 2, condivisa da tutti i conti
  • una variabile int statica account_count che inizia da 0; il costruttore le aggiunge 1 per ogni nuovo conto
  • describe() restituisce HOLDER: $BALANCE at PERCENT%, usando holder e balance del conto e il valore condiviso interest_percent

Il codice fornito legge quanti conti seguono e una riga holder balance per ciascuno, poi un nuovo tasso d'interesse. Stampa BankAccount.account_count e ogni conto, imposta BankAccount.interest_percent sul nuovo tasso e stampa di nuovo ogni conto. Con Alice 1000, Bob 2000 e il tasso 3, stampa:

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

Il tuo codice va in bank_account.gd. main.gd contiene il codice fornito per l'input/output e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online