Menu
CoddyTech

Enumerazioni in Match

Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 40 di 78.

Un'istruzione match può confrontare un valore con le opzioni di un enum. Ogni pattern è un'opzione, scritta con il nome dell'enum:

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")

Questo stampa Slow down. Come in ogni match, diverse opzioni possono condividere un ramo, separate da virgole, e _ intercetta tutto il resto:

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

Una funzione che restituisce un valore deve avere un return per ogni percorso. Anche quando i rami coprono tutte le opzioni, GDScript segnala Not all code paths return a value a meno che il match non abbia un ramo _ o non sia seguito da un return:

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

Il parametro e il tipo restituito sono l'enumerazione Light. La funzione è dichiarata al livello superiore, come l'enumerazione.

challenge icon

Sfida

Facile

Lo script dichiara l'enumerazione State con le opzioni IDLE, WALK, RUN, JUMP e FALL. Completa la funzione describe(): riceve uno stato e ne restituisce la descrizione, scelta con un match:

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

Usa un ramo per WALK e RUN, e uno per JUMP e FALL. Il codice fornito in _ready() legge una riga di nomi di stati e stampa ciascuno con la relativa descrizione. Per l'input IDLE RUN FALL, l'output è:

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

Provalo tu

extends Node

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

func describe(state: State):
	# Devuelve la descripción del estado con 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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore GDScript online