NULL 値および NULL 型

技術的には、NULL 値はメモリーの空き領域への参照 (言語によってはポインターと呼ばれます) です。参照変数 (データそのものではなく、データのアドレスを含む変数) は常に NULL 可能 です。つまり、自動的に NULL 値を持つことができるようになっています。この概念が複雑なのは、値変数を同様に NULL 可能にすることができるためです。

次の例で示すように、有用な値があるかどうかを確認するテスト機能が、変数を NULL 可能にすることによる主な利点です。
if (myCustomer != null)
	get myCustomer;
end

システム・ライブラリー dateTimeLib および strLib の特定の関数 (例えば、dateTimeLib.timeValue()) は、NULL 値を渡す場合、 または要求した情報が存在しなかった場合に、NULL 値を返すことができます。

値変数が NULL 可能であることを示すには、 宣言するときに型に疑問符 (?) を追加します。次の例のように、これは EGL で許可されるほとんどの型指定で有効です。
myNullableInt INT?;
ワード「null」は、以下のいずれの場合でも使用できます。
以下のいずれの場合でも、ワード「null」は使用できません。

変数を NULL 可能にすると、その変数が NULL かそうでないかを示すフラグが 変数に提供されます。変数を NULL に設定すると、このフラグが設定されます。

レコードは値変数であることに注意してください。 レコードが NULL 可能で NULL に設定されている場合でも、 そのレコード内のフィールドに引き続きアクセスできます。ただし、 このレコードからデータを出力する I/O ステートメントではヌル・レコードは使用できません。使用すると、 EGL が NullValueException をスローする原因となります。同様に、データをレコードに挿入する I/O ステートメントは、 その NULL 状況を FALSE に設定します。

基本型に代入互換性がある NULL 可能変数は、NULL 可能ではない変数と代入互換性があります。 NULL 可能変数は、全く同じ基本型を持つ別の NULL 可能変数との間にのみ参照互換性があります。詳しくは、NULL 可能型の相互間の代入を参照してください。

サービスに関しては、リモート・サービス呼び出しの引数として NULL 値を送信すると、 データは送信されません。受信側のパラメーターは NULL 可能であるため、 受信側の関数では、欠落データ用に新規に未初期化値が作成され、 要求されたサービス関数に渡されます。

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、および構造化されたレコード・パーツです。


フィードバック