arrays: if(null == [ ])

Gor Gyolchanyan gor.f.gyolchanyan at gmail.com
Mon May 14 11:26:11 PDT 2012


This is the original thread and there's no reply from you prior to this one.

On Mon, May 14, 2012 at 9:41 PM, Alex Rønne Petersen <xtzgzorex at gmail.com>wrote:

> On 14-05-2012 19:16, Gor Gyolchanyan wrote:
>
>> At least we could make an empty string a null array of characters for
>> consistency. How many times did anyone use the feature of string
>> literals being null-terminated?
>>
>> On Mon, May 14, 2012 at 8:56 PM, Jonathan M Davis <jmdavisProg at gmx.com
>> <mailto:jmdavisProg at gmx.com>> wrote:
>>
>>    On Monday, May 14, 2012 14:08:17 Gor Gyolchanyan wrote:
>>     > Hi! I have a small question:
>>     > Is the test for a null array equivalent to a test for zero-length
>>    array?
>>     > This is particularly interesting for strings.
>>     > For instance, I could return an empty string from a toString-like
>>    function
>>     > and the empty string would be printed, but If I returned a null
>>    string,
>>     > that would indicate, that there is no string representation and
>>    it would
>>     > cause some default string to be printed.
>>     > So, the question is, if a null array is any different from an
>>    empty array?
>>
>>    A null array is equal to an empty array.
>>
>>    assert(null == []);
>>    assert(null == "");
>>
>>    It's when you use is that things change. An array "is null" only if
>>    it's ptr
>>    property is null, which is true only for uninitialized arrays and []
>>    (the
>>    compiler doesn't bother allocating memory for [], so it's basically
>>    the same
>>    as null). However, since "" is a string literal, it _does_ have memory
>>    allocated to it, so
>>
>>    assert([] is null);
>>    assert("" !is null);
>>
>>    So, it all comes down to the ptr property. An array is considered to
>>    have a
>>    length of 0 if its length property is 0 (which null arrays do). It's
>>    only
>>    considered to be null if its ptr property is null. == uses the length
>>    property, ignoring the ptr property as long as the lengths are equal
>>    (and
>>    checking each of the elements refered to by the ptr property if the
>>    lengths
>>    aren't equal), whereas is specifically checks whether the ptr
>>    properties of the
>>    two arrays are equal.
>>
>>    Personally, I think that conflating null and empty like this is
>>    atrocious, but
>>    that's how the language works, and we're stuck with it.
>>
>>    - Jonathan M Davis
>>
>>
>>
>>
>> --
>> Bye,
>> Gor Gyolchanyan.
>>
>
> See my other post in reply to your original thread.
>
> --
> - Alex
>



-- 
Bye,
Gor Gyolchanyan.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120514/3057b9c7/attachment.html>


More information about the Digitalmars-d mailing list