Setters de propriétés
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 11 sur 65.
Une propriété peut exécuter du code chaque fois qu’on lui assigne une valeur. Ajoute deux-points après la déclaration et un bloc set(value): indenté, son accesseur en écriture :
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)value est la valeur qui est assignée. Dans le setter, l’assignation de health stocke la valeur dans la propriété ; elle ne relance pas le setter. Ce setter maintient health entre 0 et 100, quelles que soient les autres valeurs assignées par le reste du programme :
var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0Le setter s’exécute à chaque affectation, même à l’intérieur de la classe : health -= 10 dans une méthode de Player et health = start_health dans _init() passent tous les deux par lui. Seule la valeur initiale après = dans la déclaration est stockée sans l’appeler.
Un setter peut aussi refuser une valeur. S’il n’assigne pas la propriété, l’ancienne valeur reste :
var level: int = 1:
set(value):
if value > level:
level = valueOmettez le type de value : set(value: int): est une erreur. Le type propre à la propriété indique déjà ce qu’elle contient.
Défi
FacileDonnez à la propriété health de la classe Player dans player.gd un mutateur qui :
- maintient la santé stockée entre
0etmax_health: une valeur supérieure est stockée sous la formemax_healthet une valeur négative sous la forme0 - affiche
Player is down!lorsque la nouvelle santé est0et que l’ancienne santé était supérieure à0
Le code fourni lit le nombre de commandes à exécuter, puis les lit une par ligne : damage N (player.health -= N), heal N (player.health += N) ou set N (player.health = N). Après chaque commande, il affiche la santé. Pour damage 30, heal 50, damage 120 et heal 10, il affiche :
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10Votre code doit se trouver dans player.gd. main.gd contient le code fourni pour les entrées et les sorties et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d'entrée/sortie fourni : conservez-le tel quel
var player := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "damage":
player.health -= amount
elif parts[0] == "heal":
player.health += amount
elif parts[0] == "set":
player.health = amount
print("Health: %d" % player.health)
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