This is one of those cases where a long time 4D programmer (me) noticed my
long time approach to coding needed a refresh to take advantage of new
tools. New tools require new techniques.

From the start 4D has managed variables so they are never “empty”. When a
new variable was created or declared it was always initialized to the
equivalent of zero for its data type. I think this was part of the effort,
back in the early days of consumer database apps, to make “scripting”, as
it was called then, easy for non programmers. You never had to worry about
a variable having no value. It always had a value of zero at least and you
could use it right away.

Most other languages have Null. Null indicates something has no value. In
the case of numbers zero is a perfectly good value and different from not
having any value.

4D objects support Null.
4D developers for the most part do not.

Because we’ve never had to. You still don’t have to. There are work around
methods such as OB is defined. There’s nothing really wrong with using it
except it forestalls getting familiar with using Null and is more limited
in some cases. Consider this block of code:

C_OBJECT($obj)
$ok:=($obj=Null)  //               $ok = true
$ok:=Not(OB Is defined($obj))  //  $ok = true
$ok:=OB Is empty($obj)  //         $ok = true

$obj:=New object
$ok:=($obj=Null)  //               $ok = false
$ok:=Not(OB Is defined($obj))  //  $ok = false
$ok:=OB Is empty($obj)  //         $ok = true

$obj.a:=123  //  any key:value
$ok:=($obj=Null)  //               $ok = false
$ok:=Not(OB Is defined($obj))  //  $ok = false
$ok:=OB Is empty($obj)  //         $ok = false

OB is empty is the most restrictive test because empty can be Null or empty
can be undefined but Not(OB is empty) can only mean something is there.
Testing $obj=Null is equivalent to the longer command test in every
instance. I find it easier to type and easier to comprehend reading the
code.

Here are the equivalent statements for clearing $obj:

CLEAR VARIABLE($obj)
$obj:=Null

The results are the same. A ‘cleared’ object variable is a Null object
variable.

There is one more really compelling use case where testing for Null is
superior:

C_OBJECT($obj)
$ok:=($obj.a.b.c[2]=Null)  //             $ok = true
$ok:=Not(OB Is defined($obj.a.b.c[2]))  // error


This works compiled as well as interpreted and fill a big void (as it were)
in being able to test for valid objects. Testing an object path against
Null tells you if the path is valid or not. It does not tell you anything
about what part of the path fails, however.

HTH
-- 
Kirk Brooks
San Francisco, CA
=======================

*We go vote - they go home*
**********************************************************************
4D Internet Users Group (4D iNUG)
FAQ:  http://lists.4d.com/faqnug.html
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to