Menu
CoddyTech

Enums em Match

Parte da seção Lógica e fluxo do Journey de GDScript da Coddy. Lição 40 de 78.

Uma instrução match pode comparar um valor com opções de enum. Cada padrão é uma opção, escrita com o nome do 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")

Isso imprime Slow down. Como em todo match, várias opções podem compartilhar um ramo, separadas por vírgulas, e _ captura todo o resto:

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

Uma função que retorna um valor precisa de um return em todos os caminhos. Mesmo quando os ramos abrangem todas as opções, o GDScript informa Not all code paths return a value, a menos que o match tenha um ramo _ ou um return venha depois dele:

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

O parâmetro e o tipo de retorno são o enum Light. A função é declarada no nível superior, assim como o enum.

challenge icon

Desafio

Fácil

O script declara o enum State com as opções IDLE, WALK, RUN, JUMP e FALL. Complete a função describe(): ela recebe um estado e retorna sua descrição, escolhida com um match:

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

Use um ramo para WALK e RUN, e outro para JUMP e FALL. O código fornecido em _ready() lê uma linha com nomes de estados e imprime cada um com sua descrição. Para a entrada IDLE RUN FALL, a saída é:

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

Experimente você mesmo

extends Node

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

func describe(state: State):
	# Retorne a descrição do 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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e fluxo

Pratique por conta própria: Compilador de GDScript online