FUNC |
"func" permet d'appeler une fonction s'exécutant avec ses propres variables locales avec retour au traitement appelant.
SYNTAXE 1
functraitement.fonction['(' liste_args ')' ]
SYNTAXE 2
func=ExpressionWith['('liste_args ')' ]
Elément | Description | Restrictions |
Traitement dans lequel est défini la fonction (par défaut, il s'agit du traitement courant) | Le traitement doit être accessible. | |
Nom de la fonction | Doit correspondre à un Subprog dans letraitement correspondant. | |
Expression de type Char dont le résultatest un nom defonctionou traitement.fonction | Syntaxe 2. | |
Liste d'arguments séparés par ','. Cesarguments peuvent être des variables ou des expressions. | Aucune. |
# Appel de la fonction de calcul X dutraitement ZETRT
# RESULT donnera le nombre 22Local Integer RESULT
RESULT = 4*(funcZETRT.X(3,2) + 1)
End# la fonction de calcul X dutraitement ZETRT
Funprog X(A,B)
Value Integer A
Value Integer B
End A*A/B# autre façon d'appeler la fonction X dutraitement ZETRT
Local Integer RESULT
Local Char TRAIT
TRAIT = "ZETRT.X"
RESULT =4*(func=TRAIT with (3,2))+1
End
"func"permet de lancer une fonction avec passage éventuel de paramètres. A l'issue decette exécution, le traitement appelant reprend son exécution à l'instructionsuivant l'instruction "func", et pourra utiliser le résultat del'expression précisée dans le End de la fonction. Les variables localesà la fonction et les Objets ouverts par lui en mode Local sont refermés.
Lorsque l'appel "func"est fait sans préciser de traitement, la fonction doit se trouver dans letraitement lui-même. Attention, cependant, lorsqu'on utilise l'instruction Evalue en combinaison avec l'instruction "func", le traitement doit être précisé. En effet, l'instruction Evaluecrée un pseudo traitement, dans lequel l'étiquette du "func" n'existe pas.
Les arguments passés dans le "
Les arguments peuvent être des expressions ou des variables. Si c'est une expression,son passage doit obligatoirement se faire par valeur (Value); l'argument de Funprogne doit pas être dimensionné.
Une variable passée en argument peut être dimensionnée. Elle doit alorsavoir la même dimension que la variable correspondante du Funprog. Onpeut ne passer qu'une partie.
Exemple : soit un tableau d'entiers à 2 dimensions déclaré par :
Integer T2(I1..I2,J1..J2)
Avec I1 <= I11 <= I21 <= I2 et J1 <= J11 <= J21 <= J2Si on fait funcFONCTION( T2 ), on passera tout le tableau.
Si on fait funcFONCTION( T2(I1..I2,J1..J2)) idem.
Si on fait funcFONCTION( T2(I11,J1..J2)) on ne passera qu'une "ligne".
Si on fait funcFONCTION( T2(I1..I2,J11)) une "colonne".
Si on fait funcFONCTION( T2(I11,J11) un seul "élément".
si on fait funcFONCTION( T2(I11..I21,J1..J2)) plusieurs "lignes".
etc.
Pendant un "func",les informations suivantes sont conservées :
Par contre sont perdues :
Pendant l'exécution d'un "
Si on modifie pendant l'exécution d'un "
Un "func"peut s'appeler récursivement, le nombre de "
Attention, le fonction funcne peut pas être utilisée dans une clause Where.
PAFIC(20) | Traitementinexistant. |
ERDIM(55) | Nombrede dimensions incorrect. |
ERARGNO(69) | Nombred'arguments déclarés dans Funprog ne correspondant pas au nombre passé en |
ERARGTY(70) | modede passage incompatible. |
ERLAB(39) | fonctioninexistante. |
ERMODE(10) | exp_nomtrtn'est pas une chaîne de caractères. |
Adonix X3(r) L4G |