Menu
CoddyTech

Kiểu liệt kê trong match

Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 40 trên 78.

Câu lệnh match có thể so sánh một giá trị với các tùy chọn của enum. Mỗi mẫu là một tùy chọn, được viết kèm tên 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")

Lệnh này in ra Slow down. Như trong mọi câu lệnh match, nhiều lựa chọn có thể dùng chung một nhánh, ngăn cách bằng dấu phẩy, còn _ sẽ bắt mọi trường hợp còn lại:

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

Hàm (function) trả về một giá trị cần có return trên mọi nhánh. Ngay cả khi các nhánh bao quát mọi lựa chọn, GDScript vẫn báo Not all code paths return a value trừ khi match có nhánh _ hoặc có câu lệnh return theo sau:

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

Tham số và kiểu trả về là enum Light. Hàm được khai báo ở cấp cao nhất, giống như enum.

challenge icon

Thử thách

Dễ

Tập lệnh khai báo enum State với các tùy chọn IDLE, WALK, RUN, JUMP và FALL. Hoàn thành hàm describe(): hàm nhận một trạng thái và trả về mô tả của trạng thái đó, được chọn bằng match:

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

Dùng một nhánh cho WALK và RUN, và một nhánh cho JUMP và FALL. Code đã cho trong _ready() đọc một dòng chứa tên các trạng thái rồi in ra từng tên cùng với mô tả tương ứng. Với đầu vào IDLE RUN FALL, đầu ra là:

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

Tự làm thử

extends Node

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

func describe(state: State):
	# Trả về mô tả của trạng thái bằng 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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch GDScript online