널값 및 널 입력 가능 유형

기술적으로 널값은 메모리의 빈 영역을 가리키는 참조(일부 언어에서는 포인터라고 함)입니다. 참조 변수(데이터 자체가 아니라 데이터의 주소가 들어 있는 변수)는 항상 널 입력 가능하며 이는 참조 변수가 자동으로 널값을 가질 수 있음을 의미합니다. 이 아이디어를 복잡하게 만드는 것은 값 변수를 널 입력 가능하게도 작성할 수 있다는 점입니다.

변수를 널 입력 가능으로 만들어 얻게 되는 주요 이점은 다음 예제와 같이 변수에 유용한 값이 있는지 확인하기 위해 테스트하는 기능입니다.
if (myCustomer != null)
	get myCustomer;
end

시스템 라이브러리 dateTimeLibstrLib의 특정 함수(예: dateTimeLib.timeValue())는 사용자가 해당 함수에 널값을 전달하거나 요청한 정보가 존재하지 않는 경우 널값을 리턴할 수 있습니다.

값 변수가 널 입력 가능함을 표시하려면 변수를 선언할 때 유형에 물음표(?)를 추가하십시오. 이는 다음 예제와 같이 EGL에서 허용하는 대부분의 유형 스펙에서 적용됩니다.
myNullableInt INT?;
다음에서 단어 "null"을 사용할 수 있습니다.
  • 변수 선언과 필드 선언(레코드 변수 포함)
  • 함수 선언의 매개변수
  • 함수 리턴값
  • isa 또는 as 연산자의 오른쪽 피연산자
다음에서는 단어 "null"을 사용할 수 없습니다.
  • 참조 변수 선언
  • 구조화 레코드의 필드
  • DataTable의 필드
  • 양식 필드
  • 호출된 프로그램 인수

변수를 널 입력 가능으로 만들면 변수가 널인지 여부를 표시하는 플래그가 변수에 제공됩니다. 변수를 널로 설정하면 이 플래그가 설정됩니다.

레코드는 값 변수입니다. 레코드가 널 입력 가능하고 널로 설정되는 경우 여전히 해당 레코드의 필드에 액세스할 수 있습니다. 그러나 레코드에서 데이터를 출력하는 입출력(I/O) 명령문에서 널 레코드를 사용할 수 없습니다. 이로 인해 EGL이 NullValueException을 예외 처리(throw)합니다. 마찬가지로 레코드에 데이터를 넣는 입출력(I/O) 명령문은 널 상태를 false로 설정합니다.

널 입력 가능 변수는 변수의 기본 유형이 지정 호환 가능한 경우 널 입력 가능하지 않은 변수와 지정 호환 가능합니다. 널 입력 가능 변수는 정확히 같은 기본 유형을 가진 다른 널 입력 가능 변수하고만 참조 호환 가능합니다. 자세한 정보는 널 입력 가능 유형에 대한 지정을 참조하십시오.

서비스의 경우 널값을 원격 서비스 호출의 인수로 보내는 것은 데이터를 보내지 않음을 의미합니다. 수신 매개변수가 널 입력 가능하므로 수신 함수가 누락된 데이터의 초기화되지 않은 새 값을 작성한 후 이를 요청된 서비스 함수에 전달하기 때문입니다.

예제

myArrayNullInts INT?[];

Function getCustomer (custNum INT?) returns (CHAR(25)?)
   ...
end
myCustomer CustomerRecord?;

호환성 고려사항

표 1. 호환성 고려사항
플랫폼 문제
JavaScript 생성 다음 유형이 지원됩니다. ANY, BIGINT, BIN(소수 자리가 없는 경우에만), Boolean, DataItem, DATE, DECIMAL, Delegate, Dictionary, FLOAT, INT, NUM, NUMBER, SMALLFLOAT, SMALLINT, STRING(크기 제한이 없는 경우에만), TIME, TIMESTAMP, NUM, MONEY, 서비스 파트, 인터페이스 파트, 외부 유형(스테레오타입 JavaScript), 지원되는 유형의 배열, 구조화되지 않은 기본 파트, 예외 파트, SQL 레코드 파트.

다음 유형은 지원되지 않습니다. ArrayDictionary, BIN(소수 자리가 있음), BLOB, CHAR, CLOB, DBCHAR, HEX, INTERVAL, MBCHAR, NUMC, STRING(크기 제한이 있음), PACF, UNICODE, 구조화 레코드 파트.