Les fonctions peuvent exécuter des actions. Une fonction peut notamment renvoyer une valeur lorsque vous l'appelez. Cette valeur est le résultat.
Par exemple, lorsque vous appelez GetRandomInt(1, 10), vous obtenez normalement un nombre entier aléatoire compris entre 1 et 10.
Pour modifier le type de valeur que vous souhaitez obtenir de votre fonction, vous devez modifier le type dans la signature de fonction. Par exemple :
GetNumberOfMousetrapsYouCanAfford() : int
Dans cet exemple, GetNumberOfMousetrapsYouCanAfford() a le type de retour int, ainsi, à chaque appel de GetNumberOfMousetrapsYouCanAfford() dans votre code, vous pouvez vous attendre à ce qu'il renvoie un nombre entier.
GetNumberOfMousetrapsYouCanAfford() : float
D’autre part, si vous remplacez le type par float, la valeur renvoyée est différente.
Lorsque votre fonction a un type de retour spécifique, le corps de la fonction (bloc de code) doit produire un résultat qui correspond à ce type. Si ce n'est pas le cas, le code n’est pas compilé, ce qui signifie qu’une erreur de compilation se produit. Comment éviter cet écueil ?
Résultats et retours
Le résultat est la valeur qu'une fonction renvoie lorsqu'elle s'exécute.
Dans Verse, return est également un mot-clé qui indique à une fonction de fournir la valeur résultant de l'expression qui suit le mot-clé return.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # result is 5
Dans l'exemple ci-dessus, ce code renvoie la valeur 5 lors de l'appel de MyFunction().
L'omission de return ne rompt pas votre fonction, mais nous vous conseillons d'inclure explicitement return. Pour en savoir plus, consultez la rubrique Fonctions.
Retours anticipés
Lorsque votre programme exécute une expression return, le programme quitte immédiatement le bloc de code de la fonction. Autrement dit, si vous placez l'expression return avant tout autre code, le code qui suit ne s’exécute pas. Ceci peut s’avérer utile pour quitter une fonction de manière anticipée lorsqu'une certaine condition est remplie.
La fonction suivante met à jour la variable Coins (pièces) en fonction de CoinsPerMouseTrap. Néanmoins, la variable Coins doit être définie sur une valeur positive pour pouvoir acheter un piège à souris. Si la variable Coins est négative, la fonction affiche un message d'erreur et est immédiatement renvoyée, car il n’y a aucune raison d'exécuter le reste du code dans le corps de la fonction.
En réalité, sans retour, la fonction réduirait incorrectement la valeur de Coins sans indiquer que Coins avait une valeur négative.
var Coins : int = -10
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
Print(“Mousetrap bought! You have {Coins} coins left.”)
Quitter une fonction prématurément avec return peut introduire des bogues, il est donc important de l'utiliser avec précaution. Par exemple, dans la mesure où return sera exécuté avant `Print(“Piège à souris acheté ! Il vous reste {Coins} pièces."), dans le code suivant, la fonction n’affichera jamais la nouvelle valeur de Coins.
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
return
Print("Mousetrap bought! You have {Coins} coins left.")
Si un retour anticipé est intégré à votre code, ce dernier est toujours compilé, mais Visual Studio Code vous envoie un avertissement indiquant que les expressions après return ne seront pas exécutées.
Type Void pour les fonctions sans résultat utile
En règle générale, vous souhaitez qu’une fonction produise un résultat, mais ce n’est pas toujours le cas.
Comme nous l’avons vu dans la
| Type | Fonction | Valeurs |
|---|---|---|
| Ce type de valeur ne peut être défini que sur true ou false. | true/false |
| Il s’agit d’un nombre entier (pas une fraction), et | Nombres entiers |
| Ce type est destiné aux valeurs qui ne sont pas des nombres entiers, comme les fractions. | Nombres à virgule décimale |
| Ce type est destiné à tout type de texte. Il peut s'agir de lettres, de chiffres, de signes de ponctuation, d'espaces, voire d'emojis. 😻 | Lettres, chiffres, ponctuation, espaces, emojis |
Lorsque vous créez une fonction ne devant produire aucun résultat, vous pouvez définir le type de renvoi de la fonction sur void.
Cela signifie que la dernière expression du bloc de code peut produire un résultat de n’importe quel type sans générer d'erreur de compilation, car la fonction est de type void.
Vous pouvez toujours utiliser le mot-clé return pour les fonctions de type void, mais n'avez pas besoin de fournir une valeur avec le mot-clé return.
Résumé
Le résultat est ce que vous obtenez d’une fonction lorsque vous l’appelez.
Dans un bloc de code, la dernière expression produit le résultat.
Pour modifier le type de valeur d’une fonction, vous devez modifier le type de la signature de fonction.
Return est un mot-clé qui indique à la fonction de fournir la valeur résultant de l'expression qui la suit.
Un retour anticipé se produit lorsque le mot-clé return est utilisé dans un bloc de code avant la fin du bloc. En conséquence, le programme quitte ce bloc de code immédiatement, sans exécuter le reste du code dans le bloc.
Void est un type qui indique que la valeur de la fonction ne sera utilisée nulle part ailleurs. Il peut aussi indiquer que cette valeur est inutile. Vous pouvez utiliser le type void pour une fonction qui n'a pas besoin de produire un résultat.