Menu
CoddyTech

Typy wyliczeniowe w match

Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 40 z 78.

Instrukcja match może porównać wartość z opcjami enuma. Każdy wzorzec jest opcją zapisaną za pomocą nazwy enuma:

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

To wyświetla Slow down. Podobnie jak w każdym match, kilka opcji może korzystać z tej samej gałęzi, oddzielonych przecinkami, a _ przechwytuje wszystkie pozostałe:

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

Funkcja zwracająca wartość musi zawierać instrukcję return na każdej ścieżce. Nawet gdy gałęzie obejmują wszystkie możliwości, GDScript zgłasza Not all code paths return a value, chyba że instrukcja match zawiera gałąź _ albo występuje po niej instrukcja return:

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

Parametr i typ zwracany to typ wyliczeniowy Light. Funkcja jest zadeklarowana na najwyższym poziomie, podobnie jak typ wyliczeniowy.

challenge icon

Wyzwanie

Łatwy

Skrypt deklaruje wyliczenie State z opcjami IDLE, WALK, RUN, JUMP i FALL. Uzupełnij funkcję describe(): otrzymuje ona stan i zwraca jego opis, wybrany za pomocą match:

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

Użyj jednej gałęzi dla WALK i RUN oraz jednej dla JUMP i FALL. Podany kod w _ready() odczytuje wiersz nazw stanów i wyświetla każdy z nich wraz z opisem. Dla wejścia IDLE RUN FALL wynikiem jest:

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

Spróbuj swoich sił

extends Node

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

func describe(state: State):
	# Zwróć opis stanu za pomocą 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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator GDScript online