Menu
CoddyTech

Le mot-clé self

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

Une fonction déclarée dans une classe s’exécute sur un objet particulier : celui qui se trouve avant le point dans l’appel. À l’intérieur de la fonction, le mot-clé self fait référence à cet objet.

# car.gd
class_name Car
extends RefCounted

var color: String = "Red"
var model: String = "Sedan"

func describe() -> void:
	print("I am a %s %s" % [self.color, self.model])

my_car.describe() exécute describe() avec self défini sur my_car, donc la fonction lit les variables de cette voiture. Tu ne passes jamais self toi-même :

var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Je suis une berline rouge
taxi.describe() # Je suis une berline jaune

Écrire self. est facultatif. Dans une fonction de classe, color seul désigne déjà la color de l'objet, donc print("I am a %s %s" % [color, model]) fait la même chose.

Tu as besoin de self lorsqu’un paramètre porte le même nom qu’une variable de la classe. À l’intérieur de la fonction, le nom désigne le paramètre, et self. désigne la variable de l’objet :

func repaint(color: String) -> void:
	self.color = color

Sans self., la ligne color = color copie le paramètre sur lui-même, et la voiture conserve son ancienne couleur.

challenge icon

Défi

Facile

Complète les deux fonctions de la classe Car dans car.gd :

  • set_info(year, make, model) stocke ses trois paramètres dans les variables de la voiture portant les mêmes noms
  • describe() renvoie This car is a YEAR MAKE MODEL, par exemple This car is a 2020 Toyota Corolla

Le code fourni lit le nombre de voitures qui suivent, puis une ligne par voiture (year make model). Il crée chaque voiture, appelle set_info() et affiche describe() pour chaque voiture. Pour la ligne 2020 Toyota Corolla, il affiche :

This car is a 2020 Toyota Corolla

Ton code va dans car.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 count := int(OS.read_string_from_stdin())
	var cars: Array[Car] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var car := Car.new()
		car.set_info(int(parts[0]), parts[1], parts[2])
		cars.append(car)
	for car in cars:
		print(car.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