Menu
CoddyTech

Valores de una enumeración

Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 39 de 78.

Cada opción del enum es un int, así que puedes comparar las opciones y hacer cálculos con ellas:

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

El propio enum funciona como un diccionario que asigna nombres a valores. keys() devuelve los nombres en orden, values() los valores y size() el número de opciones:

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

Para imprimir el nombre de un valor, indexa keys() con él. Esto funciona cuando las opciones tienen los valores predeterminados 0, 1, 2... Para un enum con valores elegidos, usa find_key(), que devuelve el nombre de un valor:

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

Con enum Coin { COPPER = 1, SILVER = 10 } en el nivel superior, Coin.keys()[10] está fuera de rango, mientras que find_key() funciona:

print(Coin.find_key(10)) # SILVER

Para hacer lo contrario, pasar de un nombre almacenado como texto a su valor, usa corchetes. Comprueba primero el nombre con has(): un nombre que no está en el enum es un error.

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

for day_name in Day: recorre los nombres, como un bucle sobre un diccionario.

challenge icon

Desafío

Fácil

El script declara la enumeración Day, desde MONDAY hasta SUNDAY. El programa lee dos líneas: el nombre de un día en mayúsculas y un número de días (un número entero, 0 o más).

Imprime dos líneas:

  1. El nombre, has the value y el valor de ese día en la enumeración
  2. In, el número, days: y el nombre del día tantos días después

Después de SUNDAY, la semana vuelve a empezar en MONDAY. Para las entradas FRIDAY y 3, la salida es:

FRIDAY has the value 4
In 3 days: MONDAY

Pruébalo tú mismo

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())
	# Imprime el valor del día y el del día que viene después de esa cantidad de días
	pass
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de GDScript online