procedure NomDeLaProcédure ( liste des paramètres ); Déclaration des variables locales begin Instructions end;
La première ligne est l'entête de la procédure formée du mot clef procedure suivi du nom de la procédure et d'une liste optionnelle de paramètres entre parenthèses.
La partie entre begin et end est le corps de la procédure.
Sous sa forme la moins compacte, la liste des paramètres s'écrit:
paramètre1 : type1,...., paramètreN : typeN
On peut obtenir une écriture plus concise en regroupant les paramètres consécutifs de même type, mais dans ce cas chaque groupe de paramètres doit être séparé du suivant par un point virgule, sachant qu'un groupe de paramètres s'écrit:
paramètre1,...., paramètreN : type
Toute procédure n'utilise pas nécessairement des variables locales, mais si c'est le cas, elles doivent être déclarées entre l'entête et le premier begin.
NomDeLaProcédure ( liste des paramètres effectifs );
Dans l'exemple que nous avons présenté, les paramètres effectifs étaient des chaines de caractères. De manière générale, la liste des paramètres effectifs est constituée d'expressions quelconques séparées par des virgules:
expression1,...., expressionN
Pour que l'appel de procédure soit compilable (et exécutable !), le type de ces expressions doit être compatible avec celui des paramètres formels:
Voici par exemple une procédure qui possède trois paramètres formels (p, n ,o) de type chaine de caractères:
procedure FormerMail (p, n , o : string); begin mail := p+'.'+n+'@'+o+'.fr'; end;
En supposant que Prenom1, Prenom2 et Nom soient des variables de type chaine de caractères, elle pourrait être appelée de la manière suivante:
FormerMail (Prenom1+'-'+Prenom2, Nom, 'free');
Le premier paramètre effectif est une expression de type chaine de caractères, le deuxième une variable de type chaine de caractères et le troisième, un littéral de type chaine de caractères. Ces trois paramètres effectifs sont donc compatibles avec les paramètres formels.
Par contre, elle ne pourra être appelée d'aucune des manières suivantes:
FormerMail (Prenom1, Nom); FormerMail (Prenom1, Nom, 9);
En effet, dans le premier appel le nombre de paramètres effectifs n'est pas égal au nombre de paramètres formels et dans le deuxième, le type du troisième paramètre effectif (numérique) n'est pas compatible avec le type du troisième paramètre formel.
Un appel de procédure est toujours contenu dans une autre procédure, que nous appelerons la procédure appelante.
Les paramètres formels d'un sous-programme peuvent être considérés comme des variables locales.
Reprenons l'exemple de la procédure FormerMail appelée de la manière suivante:
FormerMail (Prenom1+'-'+Prenom2, Nom, 'free');
En supposant que les variables Prenom1, Prenom2 et Nom aient respectivement pour valeur 'Jean', 'Sebastien' et 'Bach', cet appel donnerait lieu aux opérations suivantes (pour voir le code de la procédure à droite , cliquez ici):