FUNC

Sommaire


"func" permet d'appeler une fonction s'exécutant avec ses propres variables locales avec retour au traitement appelant. 

 

Syntaxe

SYNTAXE 1
functraitement.fonction ['('liste_args ')' ]
 
SYNTAXE 2
func=ExpressionWith['('liste_args ')' ]
 

 

Paramètres

Elément

Description

Restrictions

traitement

Traitement dans lequel est défini la fonction (par défaut, il s'agit du traitement courant)

Le traitement doit être accessible.

fonction

Nom de la fonction

Doit correspondre à un Subprog dans letraitement correspondant.

expression

Expression de type Char dont le résultatest un nom defonctionou traitement.fonction

Syntaxe 2.

liste_args

Liste d'arguments séparés par ','. Cesarguments peuvent être des variables ou des expressions.

Aucune.

 

Exemples

   # Appel de la fonction de calcul X dutraitement ZETRT
   # RESULT donnera le nombre 22

Local 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

Description et commentaires

"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 "func" doivent être en nombre égauxà ceux de la fonction. L'ordre des paramètres dans "func"étant mis en correspondance avec ceux de Funprog.

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 <= J2

Si 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.

 

Remarques

Pendant un "func",les informations suivantes sont conservées :

Par contre sont perdues :

Pendant l'exécution d'un "func", il y a création d'une classede variables locales à la fonction d'abréviation [L]. Cette classe localedevient la classe par défaut, la classe locale au traitement appelant n'étantalors plus accessible. Au retour au traitement, on retrouve la classe localepar défaut, préexistante à l'appel.

Si on modifie pendant l'exécution d'un "func" les classes par défaut, lesmasques, les fichiers ouverts ou les boîtes de dialogue, il est impératifd'utiliser pour ce faire les instructions Local Mask, Local File, ou Local...Box. En effet, les instructions Mask, File et ...Box influent sur les OBJetsouverts, ce qui pose des problèmes au retour du "func".

Un "func"peut s'appeler récursivement, le nombre de "func" imbriqués n'est pas limitémais il faudra faire attention à la mémoire disponible, aux nombre d'OBJetsouverts et, en particulier, au nombre de fichiers ouverts en mode Local carchaque fonction est vu comme indépendante. 

Attention, le fonction funcne peut pas être utilisée dans une clause Where

 

Erreurs associées

Erreur

Description

PAFIC(20)

Traitementinexistant.

ERDIM(55)

Nombrede dimensions incorrect.

ERARGNO(69)

Nombred'arguments déclarés dans Funprog ne correspondant pas au nombre passé enfunc.

ERARGTY(70)

modede passage incompatible.

ERLAB(39)

fonctioninexistante.

ERMODE(10)

exp_nomtrtn'est pas une chaîne de caractères.

 

Mots-clés associés

FUNPROG - END  


SOMMAIRE

Adonix X3(r) L4G
Copyright (c) Adonix 1999 - All rights reserved