Menu
CoddyTech

Wartości typu wyliczeniowego

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

Każda opcja wyliczenia jest typu int, więc możesz porównywać opcje i wykonywać na nich obliczenia:

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

Samo wyliczenie działa jak słownik mapujący nazwy na wartości. keys() zwraca nazwy w kolejności, values() — wartości, a size() — liczbę opcji:

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

Aby wypisać nazwę wartości, użyj jej jako indeksu w keys(). Działa to, gdy opcje mają domyślne wartości 0, 1, 2... W przypadku enuma z wybranymi wartościami użyj find_key(), która zwraca nazwę wartości:

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

Na najwyższym poziomie, przy enum Coin { COPPER = 1, SILVER = 10 }, Coin.keys()[10] wykracza poza zakres, a find_key() działa:

print(Coin.find_key(10)) # SILVER

Aby zrobić to w drugą stronę, czyli przejść od nazwy zapisanej jako tekst do jej wartości, użyj nawiasów kwadratowych. Najpierw sprawdź nazwę za pomocą has(): nazwa, której nie ma w wyliczeniu, powoduje błąd.

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

for day_name in Day: iteruje po nazwach, podobnie jak pętla po słowniku.

challenge icon

Wyzwanie

Łatwy

Skrypt deklaruje wyliczenie Day, od MONDAY do SUNDAY. Program odczytuje dwa wiersze: nazwę dnia zapisaną wielkimi literami oraz liczbę dni (liczbę całkowitą, 0 lub większą).

Wypisz dwa wiersze:

  1. Nazwę, has the value i wartość tego dnia w wyliczeniu
  2. In, liczbę, days: i nazwę dnia przypadającego tyle dni później

Po SUNDAY tydzień zaczyna się ponownie od MONDAY. Dla danych wejściowych FRIDAY i 3 wynik to:

FRIDAY has the value 4
In 3 days: MONDAY

Spróbuj swoich sił

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())
	# Wypisz wartość bieżącego dnia oraz dnia przypadającego po podanej liczbie dni
	pass
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