« Programmation LSE » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 400 :
'''PROCEDURE &'''<identificateur>(<liste de params> ) [<type>][ '''LOCAL''' <params locaux>] (LSE2000)<br/>
 
<blockquote>Un paramètre peut être passé par référence, par valeur ou par descripteur. Le paramètre formel est passé par valeur si il figure dans la liste suivant le mot-clef LOCAL comme dans les versions précédentes de LSE. Mais il est aussi possible de déclarer un paramètre comme local en lui ajoutant # en préfixe. Sinon par défaut les paramètres sont passés par référence.<br><br>On sort d'une procédure en invoquant '''RETOUR''' ou encore '''RESULTAT''' si cette dernière doit retourner une valeur. La valeur de retour est établie selon la syntaxe: '''RESULTAT''' <expression>. Le type de la valeur de retour est spécifié à la suite des paramètres dans la déclaration de la procédure.<br><code>
 
'''PROCEDURE''' &sontEgaux('''ENTIER''' A, '''ENTIER''' B, '''ENTIER''' C) '''BOOLEEN LOCAL''' A,B<br>
&nbsp;&nbsp;&nbsp;&nbsp;C←A-B<br>
C←A-B
&nbsp;&nbsp;&nbsp;&nbsp;'''RESULTAT''' A=B<br>
'''RESULTAT''' A=B
'''FIN'''</code><br>
<br>
 
Ou en utilisant la notation # pour les paramêtres locaux (LSE2000)<br>
<br>
 
<code>
'''PROCEDURE''' &sontEgaux('''ENTIER''' #A, '''ENTIER''' #B, '''ENTIER''' C) BOOLEEN<br/>
C←A-B
&nbsp;&nbsp;&nbsp;&nbsp;C←A-B<br/>
&nbsp;&nbsp;&nbsp;&nbsp; '''RESULTAT''' A=B<br/>
'''FIN'''</code><br>
</blockquote>
 
=== Invocation ===
 
Pour invoquer une procédure on précède son identificateur par & comme dans l'exemple suivant.<br/>
 
<blockquote><code>unRésultat ← &MaProcédure(unParam, etUnAutre)</code></blockquote>
 
=== Variable ===
Comme indiqué dans le châpitrechapitre sur les types il existe une type PROCEDURE qui permet de déclarer une variable désignant une procédure. Ce qui permet par exemple, de passer une procédure en paramètre à une autre, par exemple si nous avons la procédure &TRI_PYRAMIDALE on peut lui passer une procédure de comparaison en paramètre ce qui lui permettra de trier n'importe quoi.
 
La distinction entre une variable et un procédure se fait par le fait que le nom de la variable est précédée par un arobase (@) tandis que dans le cas d'une déclaration le nom de la procédure est précédée par une perluetteesperluette (&). Lorsque l'on voudra invoquer une procédure désignée par une variable il suffira de précéder son nom par une perluetteesperluette.
 
<blockquote><code>&MaVariableProcédure</code></blockquote>
Ligne 428 ⟶ 430 :
Voici un exemple d'utilisation d'une variable de type PROCEDURE:
 
<blockquote>
<blockquote><code>* DECLARATION VARIABLE ET PROCEDURE<br>PROCEDURE @VARPROC(ENTIER PARAM):NOMBRE LOCAL PARAM<br><br>PROCEDURE &PROCVAR(ENTIER PARAM):NOMBRE LOCAL PARAM<br> RESULTAT .PI. * PARAM<br>FIN<br><br>* ASSIGNATION<br>VARPROC ← PROCVAR<br>* INVOCATION<br>AFFICHER[/,'APPEL PAR LA VARIABLE TYPE PROCEDURE',/]
* DECLARATION VARIABLE ET PROCEDURE
AFFICHER[4X,'RESULTAT = ',U,/] &VARPROC( 255 )</code></blockquote>
PROCEDURE @VARPROC(ENTIER PARAM):NOMBRE LOCAL PARAM
PROCEDURE &PROCVAR(ENTIER PARAM):NOMBRE LOCAL PARAM
RESULTAT .PI. * PARAM<br>FIN<br><br>* ASSIGNATION
VARPROC ← PROCVAR
* INVOCATION<br>AFFICHER[/,'APPEL PAR LA VARIABLE TYPE PROCEDURE',/]
AFFICHER[4X,'RESULTAT = ',U,/] &VARPROC( 255 )</code></blockquote>
</blockquote>
 
/!\ Attention il faut préalablement assigner la variable avant d'invoquer celle-ci!