Dans la leçon 5, vous avez appris qu’une fonction est un code réutilisable qui fournit des instructions pour exécuter une action, ou pour créer un résultat basé sur une commande.
Pour définir une fonction, vous devez spécifier trois éléments clés : un identificateur unique, le type d'information à attendre comme résultat et les tâches que la fonction doit exécuter une fois appelée.
Définir une fonction
Signatures de fonctions
Dans la leçon 3, nous avons appris à déclarer une variable ou une constante en la nommant et en fournissant le type de valeur qu'elle utilisera.
Une signature de fonction fonctionne de la même manière. La signature de fonction utilise un identificateur unique pour la fonction, les paramètres qui décrivent la commande dont elle a besoin, et enfin le type de retour pour le résultat (ou la sortie).
Le rôle exact de la fonction est défini dans le bloc de code.
Bloc de code
Le bloc de code est le groupe d’expressions qui intervient après la signature de fonction. Voici la syntaxe de la fonction et de son bloc de code :
name() : type =
codeblock
Il existe plusieurs façons de formater un bloc de code. L'une d’entre elles consiste à mettre en retrait les lignes de code qui suivent l'identificateur. Un exemple en est donné dans la syntaxe de la fonction ci-dessus. (Vous apprendrez plus tard comment configurer les blocs de code.)
Les expressions dans le bloc de code définissent le rôle exact de cette fonction une fois appelée.
Ces expressions ne s'exécutent que lorsque cette fonction est appelée. Lorsque le programme atteint la fin de ce bloc de code, ces expressions sont terminées, du moins jusqu'au prochain appel de cette fonction, et le programme exécute le segment de code qui suit cet appel de fonction.
Corps
Le bloc de code est également appelé corps lorsqu'il définit le rôle de la fonction.
Étendue
Jusqu'à présent, vous avez appris :
- qu’une fonction possède un identificateur unique servant à activer cette fonction de façon à ce qu’elle exécute une tâche dans le programme ;
- que le rôle d’une fonction dépend des expressions dans le corps de la fonction ;
- que lorsque la dernière ligne de code du corps est terminée, l’appel de fonction prend fin et le programme passe à la ligne de code suivante après l'appel de fonction qui se trouve dans le programme.
Les instructions de cette fonction et toutes les valeurs qui en résultent déterminent l’étendue de la fonction.
Revenons aux expressions que vous pouvez utiliser pour définir la fonction. Vous pouvez créer des constantes et des variables (consultez la leçon 3) et les ajouter au corps de la fonction.
Lorsque vous placez une variable dans le corps, elle est locale à l’étendue de la fonction. En ce sens, local signifie que ce code n’existe et ne fonctionne que dans ce corps, et seulement lorsque la fonction est appelée.
Mais que signifie étendue ? Il s’agit de l'association du nom de la fonction à la valeur produite par la fonction. Cette valeur ne peut être utilisée qu'à l'intérieur du bloc de code où elle a été créée, ou à l'intérieur de cette étendue.
Instanciation
Une instance est une application unique de cette fonction lorsque celle-ci est appelée et exécutée. Le processus de création de cette instance est appelé instanciation. Notez que les termes "instance" et "instanciation" sont tous deux liés au terme instant, qui indique un laps de temps très court.
Ce qui nous amène au concept de durée de vie.
Durée de vie
Une instance a une durée de vie, c’est-à-dire un début, un milieu et une fin.
Autrement dit, la durée de vie des éléments qui se trouvent dans le corps de la fonction est limitée à l’étendue du corps, et vous ne pouvez pas accéder aux variables locales (celles qui sont limitées à la portée actuelle) en dehors de la portée.
Conditionnelles
Dans l’exemple suivant, nous vous expliquons comment calculer le nombre maximum de pièges à souris qu'un joueur peut acheter avec les pièces dont il dispose.
La constante MousetrapsYouCanBuy est créée dans le bloc if, et son étendue est limitée au bloc if.
Lorsque la constante MaxMousetrapsYouCanBuy est utilisée en dehors du bloc de code if, elle produit une erreur, car le nom MaxMousetrapsYouCanBuy n'existe pas en dehors de l'étendue. Le message d'erreur Identificateur inconnu s’affiche. Cela signifie que la valeur MaxMousetrapsYouCanBuy n'est valable que dans l’étendue.
Lorsque l’expression se termine, les constantes locales et les variables locales créées dans le corps disparaissent. Leur cycle de vie est terminé.
Considérez l’étendue comme un petit fragment de code où les choses fonctionnent jusqu'à ce qu'elles soient terminées.
Syntaxe de la fonction
Examinons à nouveau la syntaxe de la fonction, mais cette fois-ci de manière un peu plus approfondie.
name() : type =
codeblock
name() : type = |
Il s'agit de la signature de fonction. Le nom ( La signature de fonction comprend le type de commande qui sera utilisé. La valeur que renvoie la fonction (ce qui vient après |
codeblock |
C’est dans le bloc de code de la fonction, ou corps, que vous ajoutez des constantes, des variables ou d'autres expressions pour indiquer les tâches que la fonction doit exécuter une fois appelée. |
Par exemple, une fonction permettant d’acheter un piège à souris peut être similaire à celle-ci :
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
set Coins = Coins - CoinsPerMousetrap
Print("Mousetrap bought! You have {Coins} coins left.")
Les conventions et règles d’affectation de noms relatives aux noms de fonctions sont les mêmes que celles que vous utilisez pour les variables et les constantes. Étant donné que les fonctions exécutent une séquence d'actions, il est bon de les nommer avec l'action qu'elles exécutent, par exemple BuyMousetrap().
Void
Vous avez peut-être remarqué void dans la signature de fonction BuyMousetrap(). Le type void d’une fonction indique que son appel de fonction ne renvoie rien. Nous aborderons en détail le type void dans la leçon suivante.
Ne pas se répéter
En programmation, il est important de ne pas se répéter.
Ainsi, si vous répétez une ligne de code trois fois ou plus, vous devez envisager de l’écrire différemment. Il y a bien sûr une raison à cela.
Plus vous écrivez de lignes de code, plus ce code est difficile à gérer et plus le risque de bogues est élevé, car vous finirez toujours par modifier le code à un endroit, mais pas à un autre.
Les fonctions, tout comme les constantes, permettent de ne pas répéter le code si cela n’est pas nécessaire. Ainsi, non seulement les fonctions vous évitent de dupliquer le code, mais elles réduisent aussi la maintenance et la probabilité d'erreurs dans le code.
Soyez attentif à la mise en majuscules lorsque vous écrivez du code, à la fois lorsque vous nommez vos expressions et fonctions et lorsque vous utilisez des mots-clés et des fonctions intégrées. Verse est sensible à la casse, et les erreurs et incohérences de mise en majuscules peuvent provoquer des bogues et des erreurs de compilation.
Résumé
- Une fonction est un code réutilisable qui fournit des instructions pour exécuter une action, ou produire un résultat basé sur une commande.
- Les fonctions doivent disposer de trois parties : un identificateur, un type et un bloc de code qui contient le résultat de la fonction une fois celle-ci appelée.
- Les fonctions sont appelées par leur signature de fonction.
- Un bloc de code est également appelé "corps" lorsqu'il définit les tâches de la fonction.
- L’étendue désigne la valeur associée à la fonction, qui, à son tour, est définie par le contenu du bloc de code.
- Le code contenu dans un bloc de code est local à cette étendue.
- La durée de vie est la durée de l’étendue.
- Évitez de vous répéter.