연산자 및 우선순위

다음 표에 EGL 연산자가 우선순위 내림차순으로 나열되어 있습니다. 일부 연산자는 컨텍스트에 따라 여러 의미를 갖습니다. EGL은 때로 특수 문자를 사용하여 유형 확장기능(유형 확장 문자 참조)과 구분 기호(구분 기호 참조)를 나타냅니다.

이 표에는 대입 연산자(=) 또는 복합 대입 연산자(예: +=)가 포함되어 있지 않습니다. 이러한 특수 경우에 대한 자세한 정보는 지정의 내용을 참조하십시오.

연산자(쉼표로 구분) 의미
. 멤버 액세스 연산자(점)은 레코드 내의 필드, 라이브러리 내의 함수 또는 변수 내의 특성과 같은 엔티티의 멤버에 대한 액세스를 제공합니다. 다중 레벨 규정이 허용됩니다. 왼쪽에서 오른쪽으로 이동할수록 멤버가 고유해집니다.
@ @ 연산자는 이름이 필드가 아니라 특성을 가리킴을 표시합니다.
new new 연산자는 참조 변수(값이 아니라 주소가 들어 있는 변수)의 생성자 함수(새 변수를 작성하는 특수 함수)를 호출합니다. 일부 ExternalType 파트의 경우 외에 이는 매개변수를 사용하지 않는 기본 생성자입니다. "new 연산자"를 참조하십시오.
[] 배열 액세스 연산자(대괄호)는 색인 값을 배열 이름과 구분하거나 하위 문자열 값을 문자 변수 이름과 구분합니다. a[x]는 배열 아래첨자이고 b[x:y]는 하위 문자열입니다.
+, - 단항 더하기(+) 또는 빼기(-)는 피연산자나 소괄호로 묶인 표현식 앞에 표시되는 부호이며 두 표현식 간의 연산자가 아닙니다.
** **는 "거듭제곱"으로 읽을 수 있는 지수 연산자입니다. 예를 들어, c = a**b는 c에 a의 b제곱 값이 지정됨을 의미합니다. 첫 번째 피연산자(위의 예에서 a)는 음수 값을 가질 수 없는 FLOAT입니다. 두 번째 피연산자(위의 예에서 b)는 FLOAT 리터럴 또는 변수(양수, 음수 또는 0)입니다.
*, /, &, |, xor 곱하기(*), 정수 나누기(/)와 세 개의 비트 연산자는 우선순위가 같습니다. 정수의 나누기 결과는 소수 값일 수 있습니다(예를 들어, 7/5은 1.4).

각 비트 연산자 and(&), or(|), exclusive or(xor)는 두 개의 피연산자에 대해 INT 유형의 값을 리턴하는 비트 연산을 수행합니다. 각 피연산자는 HEX(2), HEX(4), HEX(8), INT 또는 SMALLINT 유형 중 하나입니다. HEX 또는 SMALLINT 피연산자를 INT 유형으로 변환하여 연산을 시작합니다. HEX의 경우 연산에서 길이가 4바이트가 될 때까지 피연산자의 값을 0으로 왼쪽 채움합니다.

% %는 나머지 연산자입니다. 두 피연산자 또는 숫자 표현식의 첫 번째가 두 번째로 나누어지는 경우 모듈로 해석합니다. 예를 들어, 7%5는 2입니다.
+, - 더하기(+)와 빼기(-)는 우선순위가 같은 2항 연산(두 개의 피연산자가 필요)입니다.
as 캐스팅 연산자는 첫 번째 피연산자의 유형(두 번째 피연산자)을 지정합니다. as 연산자의 내용을 참조하십시오.
::, ?:, + EGL에서는 연결을 위해 두 개의 연산자를 배타적으로 사용합니다(::, ?:). 더하기 부호도 연결 연산자로 사용됩니다. 해당 연산자 간 차이는 연결 연산자의 내용을 참조하십시오.
==, !=, <, >, <=, >=, isa 부울 비교의 논리 연산자는 우선순위가 같습니다. 이들 연산자 중 하나를 포함하는 각 표현식은 TRUE 또는 FALSE로 평가됩니다.
! ! 는 not 연산자로 EGL이 이 연산자 바로 뒤에 오는 논리식의 값에 반대되는 부울 값(true 또는 false)으로 평가됩니다. 후속 표현식을 소괄호로 묶어야 합니다.
is, not, in, like, matches 이 논리 연산자는 비교에 사용되고 우선순위가 같습니다. 해당 연산자 중 하나를 포함하는 각 표현식은 true 또는 false로 평가됩니다. "in 연산자", "like 연산자", "matches 연산자"를 참조하십시오.
&&, and &&(and라고도 씀)는 "둘 다 참이어야 함"을 의미합니다. 표현식은 and 연산자 양쪽의 두 논리식이 모두 참인 경우 TRUE로 해석되고 그렇지 않으면 표현식이 FALSE로 해석됩니다.
||, or ||(or라고도 씀)는 "하나 또는 다른 하나 또는 둘 다"를 의미합니다. 표현식은 or 연산자 양쪽의 두 논리식이 모두 거짓인 경우 FALSE로 해석되고 그렇지 않으면 표현식이 TRUE로 해석됩니다.

예제

우선순위 규칙을 준수하지 않으면 다음 예제에서처럼 예기치 않은 오류가 발생할 수 있습니다.

첫 번째 예제에서는 개발자가 빼기가 곱하기보다 우선순위가 높은 것으로 잘못 가정합니다.
n NUM(3) = 100 - 98 * 100;
EGL은 방정식의 오른쪽을 100 - (98 * 100)으로 구문 분석하여 NUM(3)에 너무 큰 결과를 표시합니다.
EGL0049E An overflow error occurred when assigning a value of -9,700 to n.
두 번째 예제에서 개발자는 elementmyArray 배열의 멤버가 아닌 경우 다음 표현식이 true가 되게 하려고 합니다.
if (!element in myArray)

대신, "not" 연산자가 in 연산자보다 우선순위가 높으므로 EGL은 false 값이 있는지 배열을 검색하며 이는 개발자가 예상한 결과가 아닙니다.

두 경우 모두 오류가 발생하지 않도록 할 뿐 아니라 코드를 더 읽기 쉽게 소괄호를 사용하여 의도한 우선순위를 강제 적용합니다.
n NUM(3) = (100 - 98) * 100;
if (!(element in myArray))

호환성

표 1. 연산자의 호환성 고려사항
플랫폼 문제
COBOL 생성 vs. Java™ 생성 나머지 연산자(%)는 두 피연산자 모두 정수인 경우 COBOL과 Java 간에 일치하는 결과를 생성합니다. 그러나 피연산자에 소수가 있는 경우에는 두 언어에서 서로 다른 반올림 알고리즘을 사용하므로 두 언어 간에 나머지가 다를 수 있습니다.
JavaScript 생성 세 개의 비트 연산자(& | Xor)와 in 연산자가 지원되지 않습니다.