Zoeken…


Invoering

Er zijn twee soorten procedures in Progress ABL: interne procedures en procedure-prototypes die gevels zijn voor Windows dll's of Unix / Linux gedeelde bibliotheekprocedures.

Net als bij functies kunnen procedures niet worden genest. U kunt functies niet nesten in procedures en vice versa.

Een procedure wordt aangeroepen met de RUN instructie.

Syntaxis

  • RUN procedurenaam. // Voert een procedure uit genaamd procedurenaam.

  • RUN proc1 (INGANG "HALLO"). // Voert de tekenreeks HELLO naar proc1 in

  • RUN proc2 (INPUT var1, output var2). // Ingang var1 en output var2 naar / van proc2

  • RUN proc3 (voer "name = 'joe'" in, UITVOERTABEL ttResult). // Voert naam in = Joe en voert records in een tabel uit

  • PROCEDURE proc: // Verklaart een procedure met de naam proc

  • EINDEPROCEDURE. // Beëindigt de huidige procedure

Een eenvoudige interne procedure

In tegenstelling tot functies is het niet nodig om een procedure door te geven. Het kan overal in uw code worden geplaatst, voor of nadat u het met RUN .

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

De procedurenaam wordt gevolgd door een dubbele punt die aangeeft dat dit het begin van een blok is. Het blok eindigt met END PROCEDURE. (maar dit kan eenvoudig worden vervangen door END. ).

INPUT- en OUTPUT-parameters

Een procedure kan verschillende parameters hebben: invoer, uitvoer, invoer-uitvoer (bidirectioneel) en ook enkele speciale typen zoals tijdelijke tabellen en gegevenssets).

In de run-instructie is het optioneel om INPUT te declareren (het wordt als standaard beschouwd) - alle andere richtingen moeten specifiek worden aangegeven.

Een procedure waarbij twee gehele getallen als invoer worden gebruikt en een decimaal wordt uitgevoerd.

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

Parameters zijn volledig optioneel. Je kunt mixen en matchen op elke manier die je wilt. De volgorde van de parameters is aan jou, maar het is handig om te beginnen met invoer en te eindigen met uitvoer - je moet ze in de juiste volgorde in de run-instructie plaatsen en mixrichtingen kunnen vervelend zijn.

Recursie - zie recursie

Recursie is eenvoudig - RUN de procedure zelf uit vanuit de procedure. Als u echter te ver gaat, heeft de stapel onvoldoende ruimte.

Een procedure berekening van de faculteit.

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.

strekking

De procedure heeft zijn eigen toepassingsgebied. De externe scope zal in de procedure "bloeden" maar niet andersom.

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

Als u een variabele binnen een procedure declareert die aan de buitenkant dezelfde naam heeft als een parameter, wordt alleen een lokale variabele gemaakt.

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

Elke variabele die aan de binnenkant van een procedure is gemaakt, is alleen voor die procedure toegankelijk.

Dit genereert een compilerfout:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow