Getters de propriétés
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 12 sur 65.
Un bloc get:, le getter de la propriété, s’exécute chaque fois que la propriété est lue, et ce qu’il renvoie est la valeur obtenue par le lecteur. Utilise-le pour une valeur calculée à partir d’autres propriétés :
# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
get:
return width * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.area se lit comme une variable, sans parenthèses, mais sa valeur est recalculée à chaque lecture, de sorte qu’elle correspond toujours à la largeur et à la hauteur actuelles.
Une propriété peut avoir les deux blocs. Ici, fahrenheit ne fait que convertir : la lecture convertit depuis celsius, et l’affectation convertit en sens inverse et stocke le résultat dans celsius :
# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
get:
return celsius * 9 / 5 + 32
set(value):
celsius = (value - 32) * 5 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Une propriété avec uniquement get: est en lecture seule par convention. Lui affecter une valeur n'est pas une erreur, mais le getter ignore la valeur affectée : après r.area = 100, r.area renvoie toujours 30.
Défi
FacileComplète la classe Temperature dans temperature.gd. Elle stocke une valeur, celsius, et calcule les autres échelles à partir de celle-ci :
fahrenheit: l’accesseur en lecture renvoiecelsius * 9 / 5 + 32, et l’accesseur en écriture stocke(value - 32) * 5 / 9danscelsiuskelvin: une propriété en lecture seule dont l’accesseur en lecture renvoiecelsius + 273.15
Le code fourni lit le nombre de commandes qui suivent, puis une par ligne : c VALUE définit celsius et f VALUE définit fahrenheit. Après chaque commande, il affiche les trois propriétés avec deux décimales. Pour c 25, f 98.6 et c -40, il affiche :
25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 KTon code doit être placé dans temperature.gd. main.gd contient le code fourni pour les entrées/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 temp := Temperature.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
if parts[0] == "c":
temp.celsius = float(parts[1])
else:
temp.fahrenheit = float(parts[1])
print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
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