Menu
CoddyTech

Các giá trị của kiểu liệt kê

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 39 trên 78.

Mỗi tùy chọn trong enum đều là một int, nên bạn có thể so sánh các tùy chọn và tính toán với chúng:

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

func _ready():
	print(Day.FRIDAY) # 4
	print(Day.SATURDAY > Day.FRIDAY) # true
	print(Day.FRIDAY + 1) # 5

Bản thân enum hoạt động giống như một từ điển ánh xạ tên với giá trị. keys() trả về các tên theo thứ tự, values() trả về các giá trị, còn size() trả về số lượng tùy chọn:

print(Day.keys()) # ["MONDAY", "TUESDAY", ..., "SUNDAY"]
print(Day.size()) # 7

Để in ra tên của một giá trị, hãy dùng giá trị đó làm chỉ số của keys(). Cách này hiệu quả khi các tùy chọn có giá trị mặc định 0, 1, 2... Với enum có các giá trị được chọn trước, hãy dùng find_key(), hàm này trả về tên của một giá trị:

var today := Day.SATURDAY
print(Day.keys()[today]) # SATURDAY

Với enum Coin { COPPER = 1, SILVER = 10 } ở phạm vi toàn cục, Coin.keys()[10] vượt quá phạm vi, còn find_key() hoạt động:

print(Coin.find_key(10)) # SILVER

Để làm theo chiều ngược lại, từ tên được lưu dưới dạng văn bản sang giá trị của nó, hãy dùng dấu ngoặc vuông. Trước tiên, hãy kiểm tra tên bằng has(): tên không có trong enum sẽ gây lỗi.

var text := "FRIDAY"
if Day.has(text):
	print(Day[text]) # 4

for day_name in Day: lặp qua các tên, giống như một vòng lặp qua từ điển.

challenge icon

Thử thách

Dễ

Tập lệnh khai báo enum Day, từ MONDAY đến SUNDAY. Chương trình đọc hai dòng: tên một ngày viết hoa và một số ngày (số nguyên, từ 0 trở lên).

In ra hai dòng:

  1. Tên, has the value và giá trị của ngày đó trong enum
  2. In, số ngày, days: và tên ngày sau đó tương ứng với số ngày ấy

Sau SUNDAY, tuần bắt đầu lại từ MONDAY. Với đầu vào FRIDAY và 3, đầu ra là:

FRIDAY has the value 4
In 3 days: MONDAY

Tự làm thử

extends Node

enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

func _ready():
	var day_name := OS.read_string_from_stdin()
	var days := int(OS.read_string_from_stdin())
	# In ra giá trị của ngày đó và ngày sau số ngày đã cho
	pass
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