Menu
CoddyTech

Enumeraciones en match

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 40 de 78.

Una instrucción match puede comparar un valor con opciones de una enumeración. Cada patrón es una opción, escrita con el nombre de su enumeración:

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

Esto imprime Slow down. Como en cada match, varias opciones pueden compartir una rama, separadas por comas, y _ captura todo lo demás:

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

Una función que devuelve un valor necesita un return en cada ruta. Incluso cuando las ramas cubren todas las opciones, GDScript informa Not all code paths return a value a menos que el match tenga una rama _ o que después haya un return:

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

El parámetro y el tipo de retorno son la enumeración Light. La función se declara en el nivel superior, al igual que la enumeración.

challenge icon

Desafío

Fácil

El script declara la enumeración State con las opciones IDLE, WALK, RUN, JUMP y FALL. Completa la función describe(): recibe un estado y devuelve su descripción, elegida con un match:

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

Usa una rama para WALK y RUN, y otra para JUMP y FALL. El código proporcionado en _ready() lee una línea con nombres de estados e imprime cada uno con su descripción. Para la entrada IDLE RUN FALL, la salida es:

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

Pruébalo tú mismo

extends Node

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

func describe(state: State):
	# Devuelve la descripción del estado usando 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online