Suche…


Einführung

In Progress ABL gibt es zwei Arten von Prozeduren: interne Prozeduren und Prozedurprototypen, bei denen es sich um Fassaden für Windows-DLLs oder Unix / Linux-Bibliotheksverfahren handelt.

Wie bei Funktionen können Prozeduren nicht verschachtelt werden. Sie können Funktionen nicht in Prozeduren verschachteln und umgekehrt.

Eine Prozedur wird mit der Anweisung RUN aufgerufen.

Syntax

  • RUN verfahrename. // Führt eine Prozedur mit dem Namen Prozedurname aus.

  • RUN proc1 (EINGABE "HALLO"). // Gibt den String HELLO in proc1 ein

  • RUN proc2 (INPUT var1, Ausgang var2). // Eingänge var1 und Ausgänge var2 zu / von proc2

  • RUN proc3 (Eingabe "name = 'joe'", OUTPUT TABLE ttResult). // gibt name = joe ein und gibt Datensätze in einer Tabelle aus

  • PROCEDURE proc: // Deklariert eine Prozedur mit dem Namen proc

  • ENDE VERFAHREN. // Beendet die aktuelle Prozedur

Ein grundlegendes internes Verfahren

Im Gegensatz zu Funktionen muss keine Prozedur weitergeleitet werden. Er kann vor oder nach dem Aufruf mit RUN an beliebiger Stelle in Ihrem Code platziert werden.

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

Dem Namen der Prozedur folgt ein Doppelpunkt, der uns mitteilt, dass dies der Beginn eines Blocks ist. Der Block endet mit END PROCEDURE. (aber dies kann einfach durch END. ).

INPUT- und OUTPUT-Parameter

Eine Prozedur kann verschiedene Parameter haben: Eingabe, Ausgabe, Eingabe-Ausgabe (bidirektional) sowie einige spezielle Typen wie temporäre Tabellen und Datensätze.

In der run-Anweisung ist es optional, INPUT zu deklarieren (es gilt als Standard) - alle anderen Richtungen müssen ausdrücklich deklariert werden.

Eine Prozedur, die zwei Ganzzahlen als Eingabe verwendet und eine Dezimalzahl ausgibt.

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

Parameter sind völlig optional. Sie können nach Belieben mischen und kombinieren. Die Reihenfolge der Parameter hängt von Ihnen ab, aber es ist praktisch, mit der Eingabe zu beginnen und mit der Ausgabe zu enden - Sie müssen sie in der Run-Anweisung in die richtige Reihenfolge bringen, und die Mischrichtungen können ärgerlich sein.

Rekursion - siehe Rekursion

Rekursion ist einfach - RUN die Prozedur selbst innerhalb der Prozedur. Wenn Sie jedoch zu weit zurückkehren, wird der Stapel nicht mehr ausreichen.

Eine Prozedur berechnet die Fakultät.

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.

Umfang

Das Verfahren hat seinen eigenen Geltungsbereich. Der äußere Bereich "blutet" in die Prozedur ein, aber nicht umgekehrt.

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

Durch das Deklarieren einer Variablen innerhalb einer Prozedur, die denselben Namen wie ein Parameter auf der Außenseite hat, wird nur eine lokale Variable erstellt.

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

Jede innerhalb einer Prozedur erstellte Variable ist nur für diese Prozedur zugänglich.

Dies erzeugt einen Compiler-Fehler:

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow