Recherche…


Introduction

Il existe deux types de procédures dans Progress ABL: les procédures internes et les prototypes de procédures qui sont des façades pour les DLL Windows ou les procédures de bibliothèque partagée Unix / Linux.

Tout comme avec les fonctions, les procédures ne peuvent pas être imbriquées. Vous ne pouvez pas imbriquer des fonctions dans les procédures et inversement.

Une procédure est appelée avec l'instruction RUN .

Syntaxe

  • Nom de procédure RUN. // Exécute une procédure appelée nom-procédure.

  • RUN proc1 (INPUT "HELLO"). // Saisit la chaîne HELLO pour proc1

  • RUN proc2 (INPUT var1, sortie var2). // Entrée var1 et sorties var2 vers / depuis proc2

  • RUN proc3 (entrée "name = 'joe'", OUTPUT TABLE ttResult). // Entrée nom = joe et produit des enregistrements dans une table

  • PROCEDURE proc: // Déclare une procédure nommée proc

  • PROCÉDURE DE FIN. // Termine la procédure en cours

Une procédure interne de base

Contrairement aux fonctions, il n'est pas nécessaire de transmettre une procédure de déclaration. Il peut être placé n'importe où dans votre code, avant ou après l’appel via RUN .

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

Le nom de la procédure est suivi d'un signe deux-points nous indiquant qu'il s'agit du début d'un bloc. Le bloc se termine par END PROCEDURE. (mais cela peut être remplacé par simplement END. ).

Paramètres INPUT et OUTPUT

Une procédure peut avoir des paramètres de différents types: entrée, sortie, entrée-sortie (bidirectionnelle) et certains types spéciaux tels que les tables de temp-temp et les jeux de données).

Dans l'instruction run, il est facultatif de déclarer INPUT (il est considéré comme par défaut) - toutes les autres directions doivent être déclarées spécifiquement.

Une procédure prenant deux entiers en entrée et produisant une décimale.

PROCEDURE divideAbyB:
    DEFINE INPUT  PARAMETER piA       AS INTEGER     NO-UNDO.
    DEFINE INPUT  PARAMETER piB       AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER pdeResult AS DECIMAL     NO-UNDO.

    pdeResult = piA / piB.

END PROCEDURE.

DEFINE VARIABLE de AS DECIMAL     NO-UNDO.

RUN divideAbyB(10, 2, OUTPUT de).

DISPLAY de. //5.00

Les paramètres sont totalement optionnels. Vous pouvez mélanger et assortir comme vous le souhaitez. L'ordre des paramètres dépend de vous, mais il est utile de commencer par une entrée et de terminer par une sortie - vous devez les placer dans le bon ordre dans l'instruction d'exécution et les directions de mixage peuvent être gênantes.

Récursivité - voir récursivité

La récursivité est facile - RUN la procédure elle-même depuis l'intérieur de la procédure. Cependant, si vous recentrez trop loin, la pile manquera d'espace.

Un calcul de procédure de la factorielle.

PROCEDURE factorial:
    DEFINE INPUT  PARAMETER piNum AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER piFac AS INTEGER     NO-UNDO.

    DEFINE VARIABLE iFac AS INTEGER     NO-UNDO.

    IF piNum = 1 THEN DO:
        pifac = 1.
    END.
    ELSE DO:
        RUN factorial(piNum - 1, OUTPUT iFac).
        piFac = piNum * iFac.
    END.

END PROCEDURE.

DEFINE VARIABLE f AS INTEGER     NO-UNDO.

RUN factorial(7, OUTPUT f).

DISPLAY f.

Portée

La procédure a sa propre portée. La portée extérieure "saigne" dans la procédure mais pas dans l'autre sens.

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:

    MESSAGE i VIEW-AS ALERT-BOX. // 1
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

Déclarer une variable dans une procédure qui porte le même nom qu'un paramètre à l'extérieur ne créera qu'une variable locale.

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

    MESSAGE i VIEW-AS ALERT-BOX. // 5
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

Toute variable créée à l'intérieur d'une procédure est accessible à cette procédure uniquement.

Cela générera une erreur de compilation:

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // Unknown Field or Variable name i - error 201


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow