Menu
CoddyTech

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 / players

En 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.

challenge icon

Desafío

Fácil

Escribe la función process_data. Recibe una cadena text y devuelve una cadena:

  1. Si text no es un número entero, devuelve Input must be a number!
  2. Si el número es 0, devuelve Cannot divide by zero!
  3. De lo contrario, divide 100.0 entre 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
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