Enumeraciones en match
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 40 de 78.
Una instrucción match puede comparar un valor con opciones de una enumeración. Cada patrón es una opción, escrita con el nombre de su enumeración:
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")Esto imprime Slow down. Como en cada match, varias opciones pueden compartir una rama, separadas por comas, y _ captura todo lo demás:
match light:
Light.RED, Light.YELLOW:
print("Wait")
_:
print("Go")Una función que devuelve un valor necesita un return en cada ruta. Incluso cuando las ramas cubren todas las opciones, GDScript informa Not all code paths return a value a menos que el match tenga una rama _ o que después haya un return:
func next_light(light: Light) -> Light:
match light:
Light.RED:
return Light.GREEN
Light.GREEN:
return Light.YELLOW
_:
return Light.REDEl parámetro y el tipo de retorno son la enumeración Light. La función se declara en el nivel superior, al igual que la enumeración.
Desafío
FácilEl script declara la enumeración State con las opciones IDLE, WALK, RUN, JUMP y FALL. Completa la función describe(): recibe un estado y devuelve su descripción, elegida con un match:
State.IDLE:"Standing still"State.WALKyState.RUN:"Moving"State.JUMPyState.FALL:"In the air"
Usa una rama para WALK y RUN, y otra para JUMP y FALL. El código proporcionado en _ready() lee una línea con nombres de estados e imprime cada uno con su descripción. Para la entrada IDLE RUN FALL, la salida es:
IDLE: Standing still
RUN: Moving
FALL: In the airPruébalo tú mismo
extends Node
enum State { IDLE, WALK, RUN, JUMP, FALL }
func describe(state: State):
# Devuelve la descripción del estado usando 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]))
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
1Cadenas de texto en profundidad
Métodos de cadenasBúsqueda en cadenasReemplazar y eliminar espaciosDividir y unirRepaso - Comprobación del nombre de usuario4Diccionarios, parte 2
Diccionarios anidadosArrays de diccionariosCombinar diccionariosCopiar diccionariosRepaso: contador de frecuencias7Enumeraciones
¿Qué es una enumeración?Definir una enumeraciónValores de una enumeraciónEnumeraciones en matchRepaso: semáforo10Funciones avanzadas
Devolver múltiples valoresFunciones lambda, parte 1Funciones lambda, parte 2Repaso: ordenar con lambdaFunciones recursivas, parte 1Funciones recursivas, parte 2Repaso: sumar un array anidado13Sistema de gestión de inventario
Descripción general del proyectoAñadir artículo2Toma de decisiones avanzada
Coincidencia con variablesGuardas de coincidenciaPatrones de arraysPatrones de diccionariosComprobaciones de pertenenciaRepaso: analizador de comandos5Aplicación de agenda de contactos
Mostrar menúAñadir contacto8Gestor de expedientes estudiantiles
Descripción del proyectoAgregar estudiante3Arrays multidimensionales
Conceptos básicos de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DRepaso: arrays 2DArrays irregularesPatrones comunes de arrays 2DRepaso: tablero de juego6Conjuntos con diccionarios
¿Qué es un conjunto?El diccionario como conjuntoAñadir y eliminarUnión e intersecciónDiferencia de conjuntosRepaso: eliminar duplicados9Agregación avanzada de datos
Suma de valoresCómo encontrar el mínimo y el máximoOrdenación personalizadaRepaso: organizador de diccionariosPractica por tu cuenta: Compilador de GDScript online