Menu
CoddyTech

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 * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.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 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

Une 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.

challenge icon

Défi

Facile

Complè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 renvoie celsius * 9 / 5 + 32, et l’accesseur en écriture stocke (value - 32) * 5 / 9 dans celsius
  • kelvin : une propriété en lecture seule dont l’accesseur en lecture renvoie celsius + 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 K

Ton 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])
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