함수
함수에는 일련의 EGL 명령문이 있습니다. 함수는 프로그램의 첫 번째 실행 코드를 포함하거나 다른 프로그램에서 호출됩니다. 함수 자체는 EGL 파트가 아닙니다. (독립형 함수는 특수한 경우입니다. 독립형 함수 함수의 내용을 참조하십시오.) 함수의 개요는 함수에 대한 소개의 내용을 참조하십시오.
함수는 다음 요소를 포함할 수 있습니다.
- 소괄호로 묶인 매개변수 세트. 각 매개변수는 다른 함수에서 함수를 호출하는 경우 전달되는 인수에 해당합니다. 함수에 매개변수가 없어도 함수 이름 뒤에 한 쌍의 소괄호가 있어야 합니다.
- 리턴 유형. 함수가 호출 함수에 리턴하는 데이터의 유형을 설명합니다. 함수에 리턴 유형이 없으면 데이터를 리턴할 수 없으며 함수 자체에 값이 있어야 하는 표현식에서 함수를 사용할 수 없습니다. 서비스에서 리턴 유형은 ANY, BLOB 또는 CLOB 유형일 수 없습니다. 리턴 유형은 수신 변수의 데이터 유형과 호환 가능해야 합니다. 자세한 정보는 return의 내용을 참조하십시오.
- 로컬 변수 세트. 각 로컬 변수는 함수 내에서만 의미가 있습니다. 로컬 변수에 대한 자세한 정보는 범위의 내용을 참조하십시오.
- EGL 명령문.
- end 구분 기호.
main()이라는 이름은 프로그램을 시작하거나 호출할 때마다 첫 번째로 실행되는 최상위 레벨 함수에서 사용되도록 예약되어 있습니다. 모든 프로그램 파트에는 매개변수 또는 리턴 유형이 없는 main() 함수가 있어야 합니다.
매개변수를 선언할 때 각 매개변수가 함수에 대한 입력으로 사용되는지(in), 함수의 출력으로 사용되는지(out) 또는 둘 다인지(inOut) 여부를 지정하십시오. 아무 것도 지정하지 않는 경우 inOut 수정자가 기본값입니다. 기타 수정자는 const, field, sqlNullable 등입니다. 자세한 정보는 이 주제의 "매개변수 수정자"를 참조하십시오.
EGL에서는 두 개의 함수에서 동일한 시그니처(함수 이름과 번호, 매개변수 유형의 조합)를 사용할 수 없습니다. 오버로드된 함수(이름은 같지만 시그니처는 다름)는 허용됩니다. 자세한 정보는 오버로드 함수의 내용을 참조하십시오.
구문

- functionName
- 이 함수에 지정한 이름입니다.
- parameters
- 함수를 호출하는 데 사용되는 인수의 목록에 해당하는 변수 이름, 유형, 선택적 수정자(이 주제의 "매개변수 수정자" 참조)의 목록입니다. 매개변수는 쉼표로 구분되어야 합니다. 매개변수는 선택적이지만 소괄호는 필수입니다.
- type
- 함수가 리턴하는 값을 설명하는 유형입니다. 이 유형은 호출 함수에서 리턴값을 받는 변수의 유형과 일치해야 합니다. 유형은 기본 유형, 데이터 항목, 사전 또는 레코드 중 하나입니다. 그러면 호출 함수가 변경된 레코드에 액세스할 수 있습니다.
- statement
- EGL 명령문입니다.
매개변수 수정자
- const는 입력 인수를 상수로 처리함을 표시합니다.
- field는 매개변수에 텍스트 양식 또는 인쇄 양식 필드를 전달 중임을 표시합니다.
- in, out, inout은 상호 배타적입니다. 이들 수정자는 매개변수가 입력, 출력 또는 둘 다에 사용되는지 여부를 표시합니다.
- sqlNullable은 VisualAge® Generator에서 마이그레이션된 코드에서만 사용되며 인수(데이터베이스 액세스에 사용되는 것처럼)가 널일 수 있음을 표시합니다.
- sqlNullable(const와 호환 가능하고 in이나 inout 중 하나와 호환 가능 또는 const, out이 없는 경우 사용됨)
- const(sqlNullable과 호환 가능하고 in 또는 inout 중 하나와 호환 가능)
- field(inout과 호환 가능)
- in, out 또는 inout
- const
- 함수가 매개변수의 값을 변경하지 않는 경우 이 수정자를
사용하십시오. const를 사용하면 EGL
편집기에서 사용자가 값을 변경하지 못하게 하며 생성된 코드가
더 효율적인 경우가 있습니다.
기본요소이거나 동적 배열인 매개변수에 const 수정자를 사용할 수 있습니다. inout으로 수정된 매개변수에 상수를 전달하려면 항상 const를 사용하십시오.
제한사항:- const 수정자를 out 또는 field 수정자와 함께 사용할 수는 없지만 sqlNullable 수정자와 함께 사용할 수 있습니다.
- 다음 함수에서는 매개변수에 const
수정자를 사용할 수 없습니다.
- 외부 유형의 기타 함수 또는 생성자
- 서비스 또는 원시 라이브러리에 있는 함수
- 함수 내에서, 글로벌로 정의된 변수가 const로 수정된
함수 매개변수에 전달된 경우 글로벌로 정의된 변수를 업데이트하지 마십시오.
다음 예제에서 myParameter의 값은 글로벌로 정의된
변수의 업데이트로 인해 변경될 수도, 그렇지 않을 수도 있습니다.
program example myGlobal int = 4; function main() myFunction (myGlobal); end function myFunction(myParameter INT const in) // print 4, twice sysLib.writeStdOut(myGlobal); sysLib.writeStdOut(myParameter); // update the global variable and print 17 myGlobal = 17; sysLib.writeStdOut(myGlobal); // print the parameter value, which may be 4 or 17 sysLib.writeStdOut(myParameter); endend - 한 함수의 매개변수가 const로 수정되고
다른 함수의 동등한 매개변수가 const로
수정되지 않는 경우 함수는 위임과 호환되지 않습니다.
예는 다음과 같습니다.
Delegate MyDelegatePart( za int in, zb int const in ) end Function F1( xa int in, xb int const in ) end Function F2( xa int const in, xb int const in ) end Function F3( xa int in, xb int in ) end Function example() myDelegateVariable MyDelegatePart; myDelegateVariable = F1; // OK myDelegateVariable = F2; // Invalid: xa has const, za does not myDelegateVariable = F3; // Invalid: zb has const, xb does not end
- field
- 함수에 텍스트 양식 또는 인쇄 양식 필드를 전달할 경우 이 수정자를
사용하십시오. field 수정자를 지정할 때
blanks, cursor 또는 numeric과 같은 양식 필드 특성에 대해
매개변수를 테스트할 수 있습니다. 다음 예제와 같이 set
문에서 매개변수를 사용할 수 있습니다.
set myField red, bold;field 수정자는 명시적으로 설명되든 기본적으로든 inout 매개변수와 함께 사용되어야 합니다. field 수정자를 const 수정자와 함께 사용할 수 없습니다.
- in
- 매개변수가 함수의 입력으로 사용되는 경우 이 수정자를 사용하십시오. in을 지정하면 함수가 인수 값을 입력으로 받지만 호출 함수는 매개변수의 변경사항을 받지 않습니다. 현재 함수 또는 현재 함수가 호출한 함수에서 파일이나 데이터베이스에 액세스하는 레코드에 in을 지정할 수 없습니다.
- 제한 길이 문자열을 수정자가 in인
함수 매개변수로 지정하는 경우 텍스트 입력이
올바릅니다.
- 인수에 있는 문자가 매개변수에서 올바른 문자보다 많은 경우 EGL은 사용 가능한 길이에 맞게 복사된 컨텐츠를 자릅니다.
- 인수에 있는 문자가 매개변수에서 올바른 문자보다 적은 경우에는 EGL이 지정된 길이에 맞게 복사된 컨텐츠를 공백으로 채웁니다.
- 인수가 참조 유형이면 사본이 해당 함수 매개변수에 전달합니다. 매개변수에 지정하는 값은 참조가 가리키는 값에 영향을 주지 않습니다. 그러나 매개변수의 원래 값을 변경하지 않고 배열의 요소를 변경하는 경우 호출 프로그램이 변경을 발견합니다. 매개변수가 여전히 원래 인수가 가리키는 메모리의 동일한 영역을 가리키므로 프로그램이 변경을 발견합니다.
- out
- 매개변수가 함수의 출력으로 사용되는 경우 이 수정자를 사용하십시오. 함수는 인수 값을 입력으로 받지 않고 매개변수는 “데이터 초기화”에 설명되어 있는 규칙에 따라 초기화됩니다. 함수가 리턴할 때 호출 프로그램의 인수에 값이 지정됩니다.
- 인수가 리터럴 또는 상수인 경우 매개변수는 수정자가 in인 것처럼 처리됩니다. 현재 함수 또는 현재 함수가 호출한 함수에서 파일이나 데이터베이스에 액세스하는 레코드에 out을 지정할 수 없습니다.
- 제한 길이 문자열을 수정자가 out인 함수 매개변수로 지정하는 경우 길이 한계는 매개변수와 인수 모두에 동일해야 합니다.
- 인수가 참조 유형이면 널 참조가 해당 함수 매개변수에 전달합니다. 매개변수에 지정하는 값은 호출 함수의 해당 변수를 업데이트합니다.
- inOut
- 매개변수가 함수의 입력과 출력으로 사용되는 경우 이 수정자를 사용하십시오. 함수는 인수 값을 입력으로 받으며 호출 함수는 함수 종료 시 매개변수의 모든 변경사항을 받습니다. 인수가 리터럴 또는 상수인 경우 매개변수는 수정자가 in인 것처럼 처리됩니다.
- 인수가 레코드인 경우에는 다음 규칙이 적용됩니다.
- 레코드를 사용하여 현재 함수 또는 현재 함수가 호출한 함수에서 파일 또는 데이터베이스에 액세스하는 경우 inOut 수정자를 지정하거나 기본적으로 해당 수정자를 승인해야 합니다.
- 레코드의 유형이 매개변수와 인수에서 동일하고(예를 들어, 둘 다 EmpRecord 유형인 경우) inOut이 적용된 경우 레코드별 상태 정보(예: endOfFile 상태)가 함수에서 사용 가능하고 호출자에게 리턴됩니다.
- 인수가 참조 유형이면 해당 함수 매개변수에 참조로 전달합니다. 매개변수에 지정하는 값은 호출 프로그램의 해당 변수를 업데이트합니다.
- sqlNullable
- 세부사항은 “sqlNullable”을 참조하십시오.
- COBOL 환경은 VSE 또는 System I 환경이 아니라 System Z 환경이어야 합니다.
- SQL open 문에서 결과 세트 ID를 사용해야 합니다.
- SQL get next, replace 또는 delete 문의 경우 SQL open 문에서 사용되는 결과 세트의 이름을 참조해야 합니다.
- SQL open 문은 get next, replace 또는 delete 문과 함께 작동합니다. 두 명령문 모두 현재 함수의 함수 매개변수를 참조해야 합니다. open 문은 기타 SQL문과 다른 함수에 있을 수 없습니다.