Menu
CoddyTech

Clauses de garde

Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 68 sur 78.

Lorsqu’une fonction doit effectuer plusieurs vérifications, imbriquer un if dans un autre repousse le véritable travail de plus en plus profondément :

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"

Une clause de garde inverse la logique. Elle vérifie un cas invalide au début de la fonction et quitte immédiatement avec return. Le code après les clauses de garde s’exécute uniquement avec des valeurs valides, sans avoir besoin d’imbrication :

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

L’ordre des gardes compte : la garde qui protège une ligne doit la précéder. Vérifie le texte avec is_valid_int() avant d’utiliser le nombre, et vérifie que la valeur n’est pas zéro avant de diviser :

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

Dans une fonction -> void, une garde est un return à lui seul. Dans une boucle, continue agit comme une garde pour un élément : il ignore un élément invalide et la boucle passe au suivant.

challenge icon

Défi

Facile

Écris la fonction process_data. Elle prend une chaîne de caractères text et renvoie une chaîne de caractères :

  1. Si text n’est pas un nombre entier, renvoie Input must be a number!
  2. Si le nombre est 0, renvoie Cannot divide by zero!
  3. Sinon, divise 100.0 par le nombre et renvoie le résultat avec deux décimales

Par exemple, process_data("8") renvoie 12.50, process_data("-5") renvoie -20.00 et process_data("abc") renvoie Input must be a number!.

Écris les deux vérifications sous forme de clauses de garde au début de la fonction.

Essayez vous-même

func process_data(text: String):
	# Écrivez le code ici
	pass
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur GDScript en ligne