Menu
CoddyTech

Cláusulas de guarda

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

Quando uma função precisa fazer várias verificações, aninhar um if dentro de outro faz com que o trabalho real fique cada vez mais 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"

Uma cláusula de guarda inverte essa lógica. Ela verifica um caso inválido no início da função e sai imediatamente com return. O código após as guardas é executado apenas com valores válidos e não precisa de aninhamento:

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) retorna Bought! 20 gold left, buy(10, 30) retorna Not enough gold e buy(50, 0) retorna Invalid price.

A ordem das verificações importa: a verificação que protege uma linha deve vir antes dela. Verifique o texto com is_valid_int() antes de usar o número e verifique se há zero antes de dividir:

func share(coins: int, players: int) -> int:
	if players <= 0:
		return 0
	return coins / players

Em uma função -> void, uma guarda é um return sozinho. Dentro de um loop, continue funciona como uma guarda para um elemento: ele ignora um elemento inválido e o loop continua com o próximo.

challenge icon

Desafio

Fácil

Escreva a função process_data. Ela recebe uma string text e retorna uma string:

  1. Se text não for um número inteiro, retorne Input must be a number!
  2. Se o número for 0, retorne Cannot divide by zero!
  3. Caso contrário, divida 100.0 pelo número e retorne o resultado com duas casas decimais

Por exemplo, process_data("8") retorna 12.50, process_data("-5") retorna -20.00 e process_data("abc") retorna Input must be a number!.

Escreva as duas verificações como cláusulas de guarda no início da função.

Experimente você mesmo

func process_data(text: String):
	# Escreva o código aqui
	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