L4G >  func  

Afficher tout Masquer tout

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

 

Syntaxe

SYNTAXE 1
func traitement.fonction ['(' liste_args ')' ]
 
SYNTAXE 2
func =Expression With ['(' 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 le traitement correspondant.

expression

Expression de type Char dont le résultat est un nom de fonction ou traitement.fonction

Syntaxe 2.

liste_args

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

Aucune.

 

Exemples

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

Local Integer RESULT
RESULT = 4*(
funcZETRT.X(3,2) + 1)
End

   # la fonction de calcul X du traitement ZETRT 

Funprog X(A,B)
Value Integer A
Value Integer B
End A*A/B

    # autre façon d'appeler la fonction X du traitement ZETRT

Local Integer RESULT
Local Char    TRAIT
TRAIT = "ZETRT.X" 
RESULT =
4*(func=TRAIT with (3,2))+1
End

Description

"func" permet de lancer une fonction avec passage éventuel de paramètres. A l'issue de cette exécution, le traitement appelant reprend son exécution à l'instruction suivant l'instruction "func", et pourra utiliser le résultat de l'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 le traitement 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 Evalue cré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 Funprog ne doit pas être dimensionné.

Une variable passée en argument peut être dimensionnée. Elle doit alors avoir la même dimension que la variable correspondante du Funprog. On peut 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 func FONCTION( T2 ), on passera tout le tableau.
Si on fait func FONCTION( T2(I1..I2,J1..J2)) idem.
Si on fait func FONCTION( T2(I11,J1..J2)) on ne passera qu'une "ligne".
Si on fait func FONCTION( T2(I1..I2,J11)) une "colonne".
Si on fait func FONCTION( T2(I11,J11) un seul "élément".
si on fait func FONCTION( T2(I11..I21,J1..J2)) plusieurs "lignes".
etc.

 

Remarques

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

  • les variables globales,
  • les fichiers et les masques ouverts tant en mode "global" que Local, avec les valeurs courantes des classes [F], [G] et [M] correspondantes,
  • les boîtes de dialogues ouvertes tant en mode "global" que Local,
  • l'ensemble des listes de classes par défaut (hormis la classe locale),
  • le fait d'être en mode Inter ou Nointer.

Par contre sont perdues :

  • les fichiers, les masques et les boîtes de dialogues ouverts en mode Local et réouverts avec la même abréviation dans la fonction
  • l'étiquette associée à Onerrgo n'est pas conservée lors du passage à une fonction, même si celui-ci est fait dans le même traitement; par contre, cette information est retrouvée dans le traitement appelant à la fin de l'exécution du "func".
    Il en est de même avec l'étiquette associée à Onintgo.

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

Si on modifie pendant l'exécution d'un "func" les classes par défaut, les masques, les fichiers ouverts ou les boîtes de dialogue, il est impératif d'utiliser pour ce faire les instructions Local Mask, Local File, ou Local ...Box. En effet, les instructions Mask, File et ...Box influent sur les OBJets ouverts, 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'OBJets ouverts et, en particulier, au nombre de fichiers ouverts en mode Local car chaque fonction est vu comme indépendante. 

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

 

Erreurs associées

Erreur

Description

PAFIC (20)

Traitement inexistant.

ERDIM (55)

Nombre de dimensions incorrect.

ERARGNO (69)

Nombre d'arguments déclarés dans Funprog ne correspondant pas au nombre passé en func.

ERARGTY (70)

mode de passage incompatible.

ERLAB (39)

fonction inexistante.

ERMODE (10)

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

 

Mots-clés associés

FUNPROG - END