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 += 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 AcademyLisez 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.
Défi
FacileComplétez la classe BankAccount dans bank_account.gd :
- une variable
intstatiqueinterest_percentqui commence à2, partagée par tous les comptes - une variable
intstatiqueaccount_countqui commence à0; le constructeur lui ajoute1pour chaque nouveau compte describe()renvoieHOLDER: $BALANCE at PERCENT%, en utilisantholderetbalancedu compte, ainsi queinterest_percentpartagé
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())
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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne