Menu
CoddyTech

Énumérations avec match

Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 40 sur 78.

Une instruction match peut comparer une valeur aux options d’une énumération. Chaque motif est une option, écrite avec son nom d’énumération :

enum Light { RED, YELLOW, GREEN }

func _ready():
	var light := Light.YELLOW
	match light:
		Light.RED:
			print("Stop")
		Light.YELLOW:
			print("Slow down")
		Light.GREEN:
			print("Go")

Cela affiche Slow down. Comme dans chaque match, plusieurs options peuvent partager une branche, séparées par des virgules, et _ intercepte tout le reste :

match light:
	Light.RED, Light.YELLOW:
		print("Wait")
	_:
		print("Go")

Une fonction qui renvoie une valeur doit contenir un return dans chaque branche. Même lorsque les branches couvrent toutes les options, GDScript signale Not all code paths return a value, sauf si le match comporte une branche _ ou qu’un return le suit :

func next_light(light: Light) -> Light:
	match light:
		Light.RED:
			return Light.GREEN
		Light.GREEN:
			return Light.YELLOW
		_:
			return Light.RED

Le paramètre et le type de retour sont l’énumération Light. La fonction est déclarée au niveau supérieur, comme l’énumération.

challenge icon

Défi

Facile

Le script déclare l’énumération State avec les options IDLE, WALK, RUN, JUMP et FALL. Complète la fonction describe() : elle reçoit un état et renvoie sa description, choisie avec un match :

  • State.IDLE : "Standing still"
  • State.WALK et State.RUN : "Moving"
  • State.JUMP et State.FALL : "In the air"

Utilise une branche pour WALK et RUN, et une autre pour JUMP et FALL. Le code fourni dans _ready() lit une ligne de noms d’états et affiche chacun d’eux avec sa description. Pour l’entrée IDLE RUN FALL, la sortie est :

IDLE: Standing still
RUN: Moving
FALL: In the air

Essayez vous-même

extends Node

enum State { IDLE, WALK, RUN, JUMP, FALL }

func describe(state: State):
	# Renvoie la description de l'état à l'aide d'un match
	pass

func _ready():
	var names := OS.read_string_from_stdin().split(" ", false)
	for state_name in names:
		print(state_name, ": ", describe(State[state_name]))
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 Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur GDScript en ligne