case
EGL case문은 다중 중첩 if문에 대한 대안을 제공합니다. 하나 이상의 평가를 기반으로 EGL은 다양한 대안에서 실행할 하나의 명령문 세트를 선택합니다. case문은 C 스위치 또는 COBOL EVALUATE문과 비슷합니다.
이 명령문은 두 가지 기본 양식을 가지고 있습니다. 첫 번째 버전에서는 EGL이 단일 기준을 평가하고 when 절 중에서 일치하는 값을 검색합니다. 두 번째 버전에서는 최상위 레벨 기준을 제공하지 않으며 EGL이 각각의 when문에 대해 논리식을 평가하여 true로 평가되는 첫 번째 표현식에 대한 코드를 실행합니다. 첫 번째 버전에서 EGL이 평가하는 유일한 조건은 단순히 기준과 동일한지 여부입니다. 두 번째 조건은 불일치, 값의 범위 등을 기반으로 더 나은 유연성 및 비교를 제공합니다.
- "equals" 비교 연산자(==)의 왼쪽에 있을 수 있는 표현식. 여기서 일치 표현식은 "criterion ==" 비교의 오른쪽에 있을 수 있는 모든 항목일 수 있습니다.
- converseVar.eventKey. 일치 표현식은 키의 이름입니다("converseVar.eventKey IS" 비교의 오른쪽에 있을 수 있는 모든 항목).
- SysVar.systemType. 일치 표현식은 따옴표로 묶인 시스템 유형의 이름입니다("SysVar.systemType IS" 비교의 오른쪽에 있을 수 있는 모든 항목).
다른 기준은 올바르지 않습니다. 예를 들어, 한 레코드를 다른 레코드와 비교하거나 I/O 오브젝트(예: SerialRecord)를 endOfFile과 비교할 수 없습니다.
COBOL에서와 같지만 C에서와는 다르게 제어는 한 when 절에서 다음 when 절로 전달되지 않습니다. when 또는 otherwise 절에서 명령문이 실행된 후 제어는 case문의 끝 바로 뒤에 오는 EGL 명령문에 전달됩니다. EGL이 when 절과 일치하지 않거나 otherwise 절을 찾지 않는 경우에는 제어도 오류 발생 없이 case문의 끝 뒤에 오는 다음 명령문에 전달됩니다.
단일 절에 다중 일치 표현식이 포함된 경우(이 주제의 "예제" 참조) EGL은 해당 표현식을 왼쪽에서 오른쪽으로 평가하고 일치를 찾으면 중지됩니다.
구문

- label
- exit문이 참조할 수 있는 콜론이 뒤따라오는 레이블입니다. 자세한 정보는 조건문 및 루프 명령문의 내용을 참조하십시오.
- criterion
- 변수, 상수, 표현식, 리터럴 또는 시스템 변수입니다(예: converseVar.eventKey 또는
sysVar.systemType).
criterion(첫 번째 구문 다이어그램)을 지정하는 경우 각각의 후속 when 절은 matchExpression의 인스턴스를 하나 이상 포함해야 합니다. criterion(두 번째 구문 다이어그램)을 지정하지 않는 경우 각각의 후속 when 절은 logical expression을 포함해야 합니다.
- when
- 다음 경우 중 하나에서만 호출되는 절의 시작 부분입니다.
- criterion을 지정했으며 when 절이 criterion과 동일한 matchExpression을 포함할 첫 번째 절입니다.
- criterion을 지정하지 않았고 when 절이 TRUE로 평가되는 logical expression을 포함할 첫 번째 절입니다.
EGL 명령문 없이 해당 절을 코드화하는 경우에는 otherwise 절을 호출하지 않고 case 루프에서 제어가 전달됩니다.
case문은 임의의 수의 when 절을 가질 수 있습니다.
- matchExpression
- criterion과 비교되는 표현식입니다. 자세한 정보는 이 주제에서 "일치 표현식"을 참조하십시오.
- logicalExpression
- TRUE 또는 FALSE로 분석되는 표현식입니다. 자세한 정보는 "논리식"을 참조하십시오.
- statement
- EGL이 연관된 when 표현식과 일치하거나 연관된 otherwise 절에 도달하는 경우 실행될 명령문입니다.
- otherwise
- when 표현식과 일치할 수 없는 경우 EGL이 호출하는 절의 시작 부분입니다.
예제
case (myRecord.requestID)
when (1)
myFirstFunction();
when (2, 3, 4)
try
call myProgram;
onException(iex InvocationException)
myCallFunction(fileEx);
end otherwise
myDefaultFunction();
end
Program calc3
x INT = 3;
y INT = 5;
z INT = 7;
function main()
case
when (x == 3)
writeStdOut("x passes");
when (y == 5)
writeStdOut("y passes");
when (z == 7)
writeStdOut("z passes");
otherwise
writeStdErr("You should not see this msg");
end end
콘솔에 "x passes"라는 단어가 표시됩니다. TRUE 표현식이 발견되면 case문이 종료됩니다.