Les procédures et fonctions
En informatique, une fonction est une entité qui encapsule une séquence d’instructions effectuant un traitement spécifique indépendant du reste du programme. Cette fonction peut être réutilisée dans le même programme, ou dans un autre. Il faut voir une fonction comme un outil, et la bibliothèque comme la boite à outils. Il est commun que les développeurs réutilisent pendant toutes leurs carrières les outils conçus par eux-mêmes ou d’autres développeurs.
Les fonctions permettent de diviser un problème en décomposant le programme à réaliser en portions de code plus faciles à utiliser et à entretenir. Les instructions dans la fonction sont encapsulées à l’intérieur de celle-ci, c’est-à-dire que la fonction devient une boite noire. Le programmeur peut faire appel à la fonction sans se préoccuper des détails internes à celle-ci. Il faut distinguer deux types de fonction : Une PROCÉDURE
ne retourne aucune valeur, alors qu’une FONCTION
renvoie une seule valeur. Par exemple, le pseudo code suivant renvoi la valeur maximum des deux variables.
FONCTION max(a: ENTIER, b: ENTIER): ENTIER VARIABLE r: ENTIER SI a > b: r <- a SINON: r <- b FIN SI RETOURNER r FIN FONCTION
Maintenant que cette fonction existe, il est possible de l’utiliser, comme s’il s’agissait d’instruction standard, ce qui simplifie nos algorithmes :
DÉBUT VARIABLE a, b, c: ENTIER LIRE "Veuillez compléter la valeur de A:", a LIRE "Veuillez compléter la valeur de B:", b c <- max(a, b) ÉCRIRE "La valeur maximum vaut", c FIN
Le passage par copie ou par référence
Dans les langages de programmation, une copie des variables provenant de la fonction est reçue dans les paramètres au lieu de travailler sur les véritables variables de la fonction appelante. Ce choix est fait pour des raisons de sécurité pour l’intégrité des données. Pour concrétiser ce choix, il est possible d’utiliser le symbole ↓ pour les copies et d’utiliser le symbole lorsqu’on ne souhaite pas copier les valeurs ↕. Ce symbole est appelé une RÉFÉRENCE
.
Dans l’exemple ci-dessous, la procédure suivante n’aurait pas été possible avec une copie des variables, puisque la modification n’aurait eu lieu que dans la fonction, et pas dans tout le programme.
PROCÉDURE swap(↕a: ENTIER, ↕b: ENTIER) VARIABLE c: ENTIER c <- a a <- b b <- c FIN PROCÉDURE
Pour bien comprendre ce comportement de copie, il faut avant tout comprendre pourquoi les données sont copiées. À chaque appel de fonction, une nouvelle zone mémoire est créée pour accueillir les variables temporaires de cette fonction. Les arguments sont alors copiés dans les paramètres. La fonction est ensuite exécutée, et la valeur de retour est copiée dans la fonction appelante. Toutes les variables utilisées à l’intérieur de la fonction sont détruites une fois la fonction terminée.