Szukaj…


Wprowadzenie

Istnieją dwa rodzaje procedur w toku ABL: wewnętrzne procedury i prototypy procedur, które są fasadami dla bibliotek DLL Windows lub procedur bibliotek współdzielonych Unix / Linux.

Podobnie jak w przypadku funkcji, procedury nie mogą być zagnieżdżone. Nie można zagnieżdżać funkcji w procedurach i odwrotnie.

Wywoływana jest procedura z instrukcją RUN .

Składnia

  • Uruchom nazwę procedury. // Uruchamia procedurę o nazwie procedurename.

  • RUN proc1 (WEJŚCIE „CZEŚĆ”). // Wprowadza ciąg CZEŚĆ do proc1

  • RUN proc2 (WEJŚCIE var1, wyjście var2). // Wejścia var1 i wyjścia var2 do / z proc2

  • RUN proc3 (wpisz „name = 'joe'”, TABELA WYNIKÓW ttResult). // Wprowadza nazwę = Joe i wyświetla rekordy w tabeli

  • PROCEDURA proc: // Deklaruje procedurę o nazwie proc

  • PROCEDURA KOŃCOWA. // Kończy bieżącą procedurę

Podstawowa procedura wewnętrzna

W przeciwieństwie do funkcji nie ma potrzeby przekazywania dalej deklaracji procedury. Można go umieścić w dowolnym miejscu w kodzie, przed lub po wywołaniu go za pomocą RUN .

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

Po nazwie procedury pojawia się znak dwukropka informujący, że jest to początek bloku. Blok kończy się na END PROCEDURE. (ale można to zastąpić po prostu END. ).

Parametry WEJŚCIA i WYJŚCIA

Procedura może mieć parametry różnego rodzaju: dane wejściowe, wyjściowe, dane wejściowe-wyjściowe (dwukierunkowe), a także niektóre specjalne typy, takie jak tabele tymczasowe i zestawy danych.

W instrukcji run deklaracja INPUT jest opcjonalna (uważa się ją za domyślną) - wszystkie inne instrukcje muszą być wyraźnie zadeklarowane.

Procedura przyjmuje dwie liczby całkowite jako dane wejściowe i dane dziesiętne.

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

Parametry są całkowicie opcjonalne. Możesz mieszać i dopasowywać w dowolny sposób. Kolejność parametrów zależy od ciebie, ale wygodnie jest zacząć od wejścia i zakończyć od wyjścia - musisz ustawić je w odpowiedniej kolejności w instrukcji run, a kierunki mieszania mogą być denerwujące.

Rekurencja - patrz rekursja

Rekurencja jest łatwa - RUN samą procedurę od wewnątrz procedury. Jeśli jednak powtórzysz się zbyt daleko, na stosie zabraknie miejsca.

Procedura obliczania silni.

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.

Zakres

Procedura ma swój zakres. Zewnętrzny zakres „spadnie” do procedury, ale nie w drugą stronę.

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

Zadeklarowanie zmiennej w procedurze, która ma taką samą nazwę jak parametr na zewnątrz, spowoduje utworzenie tylko zmiennej lokalnej.

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

Każda zmienna utworzona wewnątrz procedury jest dostępna tylko dla tej procedury.

To wygeneruje błąd kompilatora:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow