Cláusulas de guarda
Parte de la sección Lógica y flujo del Journey de GDScript de Coddy. Lección 68 de 78.
Cuando una función necesita varias comprobaciones, anidar un if dentro de otro hace que el trabajo real quede cada vez más profundo:
func buy(gold: int, price: int) -> String:
if price > 0:
if gold >= price:
return "Bought! %d gold left" % (gold - price)
else:
return "Not enough gold"
else:
return "Invalid price"Una cláusula de protección le da la vuelta a esto. Comprueba un caso no válido al principio de la función y sale de inmediato con return. El código que sigue a las comprobaciones se ejecuta solo con valores válidos y no necesita anidamiento:
func buy(gold: int, price: int) -> String:
if price <= 0:
return "Invalid price"
if gold < price:
return "Not enough gold"
return "Bought! %d gold left" % (gold - price)buy(50, 30) devuelve Bought! 20 gold left, buy(10, 30) devuelve Not enough gold y buy(50, 0) devuelve Invalid price.
El orden de las comprobaciones importa: la comprobación que protege una línea debe ir antes que ella. Comprueba el texto con is_valid_int() antes de usar el número y comprueba si es cero antes de dividir:
func share(coins: int, players: int) -> int:
if players <= 0:
return 0
return coins / playersEn una función -> void, una guarda es un return por sí solo. Dentro de un bucle, continue funciona como una guarda para un elemento: omite un elemento no válido y el bucle continúa con el siguiente.
Desafío
FácilEscribe la función process_data. Recibe una cadena text y devuelve una cadena:
- Si
textno es un número entero, devuelveInput must be a number! - Si el número es
0, devuelveCannot divide by zero! - De lo contrario, divide
100.0entre el número y devuelve el resultado con dos decimales
Por ejemplo, process_data("8") devuelve 12.50, process_data("-5") devuelve -20.00 y process_data("abc") devuelve Input must be a number!.
Escribe las dos comprobaciones como cláusulas de guarda al principio de la función.
Pruébalo tú mismo
func process_data(text: String):
# Escribe el código aquí
pass
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 diccionarios12Manejo básico de errores
¿Qué es el manejo de errores?Validación de entradasCláusulas de guardaDevolver códigos de errorRepaso: división seguraPractica por tu cuenta: Compilador de GDScript online