Menu
CoddyTech

Variables d’instance et variables statiques

Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 9 sur 65.

Un var normal dans une classe est une variable d’instance : chaque objet possède la sienne. Un static var appartient plutôt à la classe : il n’existe qu’une seule valeur, partagée par tous les objets.

# 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

Lisez une variable statique à l’aide du nom de la classe, comme dans Student.count, sans avoir besoin d’un objet. À l’intérieur de la classe, utilisez son nom : count += 1 dans _init() compte chaque étudiant créé jusqu’à présent.

Modifier Student.school le change pour tous les étudiants à la fois. ada.school = "Night School" ferait la même chose, car il n’y a qu’un seul school ; écrire le nom de la classe rend cela clair.

Une const est partagée de la même manière, mais ne peut jamais changer. Utilise une static var pour les données partagées qui changent pendant l’exécution du programme, comme un compteur ou un paramètre que suivent tous les objets.

challenge icon

Défi

Facile

Complétez la classe BankAccount dans bank_account.gd :

  • une variable int statique interest_percent qui commence à 2, partagée par tous les comptes
  • une variable int statique account_count qui commence à 0 ; le constructeur lui ajoute 1 pour chaque nouveau compte
  • describe() renvoie HOLDER: $BALANCE at PERCENT%, en utilisant holder et balance du compte, ainsi que interest_percent partagé

Le code fourni lit le nombre de comptes qui suivent, puis une ligne holder balance pour chacun, puis un nouveau taux d’intérêt. Il affiche BankAccount.account_count et chaque compte, définit BankAccount.interest_percent sur le nouveau taux, puis affiche à nouveau chaque compte. Pour Alice 1000, Bob 2000 et le taux 3, il affiche :

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

Votre code va dans bank_account.gd. main.gd contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

extends Node

func _ready():
	# Code d'entrée/sortie fourni : laissez-le tel quel
	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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur GDScript en ligne