수색…
소개
진행 ABL에는 두 가지 유형의 프로 시저가 있습니다. 내부 프로 시저와 프로 시저 프로토 타입은 Windows dll 또는 Unix / Linux 공유 라이브러리 프로 시저에 대한 facades입니다.
함수와 마찬가지로 프로 시저를 중첩 할 수 없습니다. 프로 시저에서 함수를 중첩 할 수 없으며 그 반대도 마찬가지입니다.
프로 시저가 RUN
문과 함께 호출됩니다.
통사론
프로 시저 이름을 실행하십시오. // procedurename이라는 프로 시저를 실행합니다.
RUN proc1 (INPUT "HELLO"). // HELLO 문자열을 proc1에 입력합니다.
RUN proc2 (입력 var1, 출력 var2). // var1을 입력하고 var2를 proc2로 /로부터 출력한다.
RUN proc3 (입력 "name = 'joe'", 출력 테이블 ttResult). // names = joe를 입력하고 테이블에 레코드를 출력합니다.
PROCEDURE proc : // proc라는 프로 시저를 선언합니다.
끝 절차. // 현재 프로 시저를 종료합니다.
기본 내부 절차
함수와 달리 프로 시저를 선언 할 필요가 없습니다. RUN
을 사용하여 호출하기 전이나 후에 코드의 아무 곳에 나 배치 할 수 있습니다.
RUN proc.
//Procedure starts here
PROCEDURE proc:
//Procedure ends here
END PROCEDURE.
프로 시저 이름에는 콜론 기호가 표시되어 이것이 이것이 블록의 시작임을 나타냅니다. 블록은 END PROCEDURE.
로 END PROCEDURE.
납니다 END PROCEDURE.
(그러나 이것은 단순히 END.
로 대체 될 수 있습니다 END.
).
INPUT 및 OUTPUT 매개 변수
프로 시저에는 입력, 출력, 입출력 (양방향) 및 임시 테이블과 데이터 세트와 같은 몇 가지 특수한 유형의 매개 변수가있을 수 있습니다.
run 문에서 INPUT
을 선언하는 것은 선택 사항입니다 (기본값으로 간주 됨). 다른 모든 지시는 구체적으로 선언해야합니다.
두 개의 정수를 입력으로 취하고 십진수를 출력하는 절차.
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
매개 변수는 전적으로 선택 사항입니다. 원하는대로 혼합하고 일치시킬 수 있습니다. 매개 변수의 순서는 사용자가 결정할 수 있지만 입력으로 시작하여 출력으로 끝내면 편리합니다. run 문에서 올바른 순서로 입력해야하며 혼합 방향이 짜증 스럽습니다.
재귀 - 재귀 참조
재귀는 쉽습니다. 프로 시저 내부에서 프로 시저 자체를 RUN
하십시오. 그러나 너무 멀리 재귀하면 스택에 공간이 부족합니다.
프로 시저는 계승을 계산합니다.
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.
범위
프로 시저에는 자체 범위가 있습니다. 외부 범위는 절차로 "흘릴"것이고 다른 방법은 arround가 아닙니다.
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
외부의 매개 변수와 이름이 같은 프로 시저 내에서 변수를 선언하면 로컬 변수 만 생성됩니다.
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
프로 시저 내부에서 작성된 변수는 해당 프로 시저에서만 액세스 할 수 있습니다.
이렇게하면 컴파일러 오류가 발생합니다.
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