함수에 대한 소개
함수는 EGL 로직 파트의 기본 단위입니다.
함수는 일련의 EGL 문을 포함합니다. 독립형 함수를 제외하고 함수는 EGL 파트가 아닙니다. 함수는 프로그램의 첫 번째 실행 코드를 포함하거나 다른 함수에서 호출됩니다.
이름 main()은 프로그램을 시작하거나 호출할 때 먼저 실행되는 최상위 레벨 함수에 예약됩니다. 모든 프로그램 파트는 매개변수 또는 리턴 유형이 없는 main()으로 이름 지정된 함수를 포함해야 합니다.
함수 매개변수는 숫자, 유형 및 함수에 전달하는 인수의 위치에
대응합니다. 두 유형의 매개변수를
사용할 수 있습니다.
- 참조 매개변수는 값이 저장된 위치를 가리킵니다(참조 변수 참조).
- 값 매개변수는 값 자체를 포함합니다.
예를 들어, 동적 배열은 참조 변수입니다.
매개변수를 선언하는 경우 다음 매개변수 수정자 중
하나 이상을 지정할 수 있습니다.
- const는 입력 인수가 상수로 처리됨을 표시합니다.
- field는 텍스트 양식 또는 인쇄 양식 필드가 매개변수로 전달됨을 표시합니다.
- in, out, inout은 상호 배타적이며 매개변수가 입력이나 출력 또는 모두에 대한 매개변수인지 여부를 표시합니다.
- sqlNullable은 VisualAge® 생성기에서 마이그레이션된 코드를 위한 것이며 데이터베이스 액세스에 사용된 대로 인수가 널일 수 있음을 표시합니다.
함수 구문 및 매개변수 수정자에 대한 정보는 함수의 내용을 참조하십시오.
오버로드 함수
오버로드 함수에는 하나의 함수 이름에 대한 다중 함수 시그니처가 있습니다. 함수의 시그니처는 함수의 이름과, 해당 매개변수의 수와 유형을 조합한 것입니다. 함수의 리턴값은 해당 시그니처의 파트가 아닙니다. 다중 함수에 동일한 이름이 있는 경우 EGL이 시그니처를 사용하여 함수 코드를 함수 호출에 일치시킵니다. EGL은 두 개의 함수가 동일한 시그니처를 가지도록 허용하지 않습니다.
다수의
EGL 시스템 함수가 오버로드됩니다. 예를 들어, 하나 또는 두 개의 매개변수로
sysLib.audit() 함수를 호출할 수 있습니다. 두 번째 매개변수는
저널 ID를 지정합니다. 단일 매개변수로 함수를 호출하는 경우, 함수는 시스템 저널에
씁니다. 두 개의 함수가
다음 시그니처를 가집니다.
sysLib.audit(record BasicRecord in)
sysLib.audit(record BasicRecord in, jid SMALLINT in)
다른 예제에서
mathLib.abs() 함수는 숫자 유형의
범위를 승인하고 동일한 유형의 값을 입력으로
리턴합니다. 여기서 각 숫자 유형에 대해
다른 시그니처가 필요합니다.
mathLib.abs(inputVar SMALLINT)
mathLib.abs(inputVar INT)
mathLib.abs(inputVar BIGINT)
해당 전제조건이 충족되면
오버로드 함수를 작성할 수 있습니다.
- 함수는 독립형 함수가 될 수 없습니다.
- 오버로드 함수는 동일한 파트 내에 있어야 합니다. 두 파트가 동일한 이름의 함수를 포함하는 경우 함수에 다른 시그니처가 있어도 해당 함수 이름에 대해 규정되지 않은 참조를 사용할 수 없습니다.
- 함수 시그니처가 리턴값을 포함하지 않으므로 리턴값을 제외하고 동일한 두 함수를 가질 수 없습니다.
생성 중에 EGL은 해당 규칙을 사용하여
규정되지 않은 함수 이름에 대한 참조를 분석합니다.
- EGL은 현재 범위에서 일치하는 이름이 있는 모든 함수를 검색합니다.
- EGL이 둘 이상의 컨테이너에서(논리적 파트) 일치하는 함수 이름을 찾는 경우 생성기가 애매모호한 참조 오류를 표시합니다.
- 둘 이상의 함수가 매개변수 수와 일치하는 경우 EGL이 4단계를 계속합니다. 일치하는 함수가 없는 경우 생성기가 올바르지 않은 인수 오류를 표시합니다.
- EGL이 함수 호출의 인수 유형과 일치하는 매개변수가 있는 함수를 검색합니다. 일치를 찾을 수 없는 경우 EGL이 5단계를 계속합니다. 유효성 검증 오류의 원인이 되므로 EGL이 여러 개의 일치하는 함수를 찾을 수 없습니다.
- EGL은 함수 호출에서 인수와 호환 가능한 지정인 매개변수가 있는 함수를 검색합니다. 일치를 찾을 수 없는 경우 생성기가 올바르지 않은 인수 오류를 표시합니다. 다중 일치가 발견되면 EGL이 최상의 일치를 검색합니다. 예를 들어, 인수가 SMALLINT이고 EGL이 두 함수(INT 매개변수가 있는 함수 및 BIGINT 매개변수가 있는 함수)를 찾는 경우 INT가 SMALLINT 크기에 더 근접하므로 EGL이 INT 매개변수가 있는 함수를 선택합니다. EGL이 해당 일치를 찾을 수 없는 경우 생성기가 애매모호한 참조 오류를 표시합니다.