ORDA やクラスなどのオブジェクトが登場して以来、未定義 (undefined) 値を扱うことが多くなりました。
もっと簡単に扱えるようにしてほしいという声もあり、v20 からは、どんな型の値でもエラーなしに未定義値と比較できるようにしました。
通常 4D では、比較演算子 =、#、>、<、>=、<= は、それぞれのオペランドの型と値をチェックします。もし、2つのオペランドの型が異なる場合、比較はエラーを生成します:
前述のように、クラスやオブジェクトを扱うにあたっては、未定義の値も扱う必要が出てくるため、このルールをより柔軟なものにしました。v20 からは、すべての変数型で未定義値を比較することができます:
- 未定義の変数と null または未定義の値を比較する場合にのみ、= による比較は true を返し、それ以外の場合には false を返します:
$o:=new object
If ($o.undefined =10)
...
else
// $o.undefined は未定義であるため、false が返されます
...
End if
- 未定義の変数と null または未定義の値を比較した場合にのみ、# による比較は false を返し、それ以外の場合には true を返します:
$o:=new object
If ($o.undefined #10)
// $o.undefined は未定義であるため、true が返されます
...
else
...
End if
- 比較演算子 >、<、>=、<= は、未定義の変数とスカラー値 (数値、テキスト、日付、時間、ブール) との比較のすべてで false を返します。それ以外の場合には、比較が意味を持たないため、4D はエラーを生成します。
$o:=new object
If ($o.undefined >10)
...
else
// $o.undefined は未定義であるため、false が返されます
...
End if
詳しくはドキュメントを参照ください!