Menu
CoddyTech

Valores de Enum

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

Cada opção de enum é um int, então você pode comparar as opções e fazer cálculos com elas:

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

O próprio enum funciona como um dicionário de nomes para valores. keys() retorna os nomes em ordem, values() os valores e size() o número de opções:

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

Para imprimir o nome de um valor, use-o como índice em keys(). Isso funciona quando as opções têm os valores padrão 0, 1, 2... Para um enum com valores escolhidos, use find_key(), que retorna o nome de um valor:

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

Com enum Coin { COPPER = 1, SILVER = 10 } no nível superior, Coin.keys()[10] está fora do intervalo, enquanto find_key() funciona:

print(Coin.find_key(10)) # SILVER

Para fazer o caminho inverso, de um nome armazenado como texto para seu valor, use colchetes. Primeiro, verifique o nome com has(): um nome que não está no enum é um erro.

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

for day_name in Day: percorre os nomes, como um loop em um dicionário.

challenge icon

Desafio

Fácil

O script declara o enum Day, de MONDAY a SUNDAY. O programa lê duas linhas: o nome de um dia em letras maiúsculas e um número de dias (um número inteiro, 0 ou mais).

Imprima duas linhas:

  1. O nome, has the value e o valor desse dia no enum
  2. In, o número, days: e o nome do dia correspondente a esse número de dias depois

Depois de SUNDAY, a semana começa novamente em MONDAY. Para as entradas FRIDAY e 3, a saída é:

FRIDAY has the value 4
In 3 days: MONDAY

Experimente você mesmo

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())
	# Imprima o valor do dia e o do dia após essa quantidade de dias
	pass
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