use "" as an array key
Kay C Lan
lan.kc.macmail at gmail.com
Fri Sep 23 23:26:14 EDT 2016
On Fri, Sep 23, 2016 at 2:27 AM, Peter TB Brett
<peter.brett at livecode.com> wrote:
>
> "" isn't "the absence of a string", it's a string that's 0 characters long.
> Being able to use it as an array key is important for being able to
> represent real-world data in an array.
It's an important point that "", a 0 character string is not the same
as NULL because we as humans often 'see them' as the same.
Unfortunately one of the great features of LC, the fact it's typeless
and it auto converts integers/strings/dates back and forward as we
need them, also means that occasionally it makes the same mistake we
make:
In the msg box - 8 lines all ending with msg:
put "empty = " & quote & quote & " is " & (empty = "") into msg
put cr & "empty = NULL is " & (empty = NULL) after msg
put cr & "navtiveCharToNum(empty) = " & nativeCharToNum(empty) after msg
put cr & "natvieCharToNum(" & quote & quote & ") = " &
nativeCharToNum("") after msg
put cr & "nativeCharToNum(NULL) = " & nativeCharToNum(NULL) after msg
put cr & "Therefore:" after msg
put cr & "navtiveCharToNum(empty) = nativeCharToNum(NULL) is " &
(nativeCharToNum(empty) = nativeCharToNum(NULL)) after msg
put cr & "So although an empty string is NOT the same as the NULL
character, in some cases LC treats them the same" after msg
or to put it another way, "" and empty do not roundtrip
In the msg box:
put numToNativeChar(nativeCharToNum(empty)) = empty --returns false
When dealing with databases, tracking the difference between NULL and
empty and "" can be a real pain. Is this a feature or a bug? To me the
advantages of 'typeless' far outweigh the 0.001% of times I hit this
gotcha.
More information about the use-livecode
mailing list