if(arr) now a warning

via Digitalmars-d digitalmars-d at puremagic.com
Sun Apr 19 02:37:32 PDT 2015


On Sunday, 19 April 2015 at 08:05:46 UTC, Jonathan M Davis wrote:
> On Friday, April 10, 2015 09:27:55 w0rp via Digitalmars-d wrote:
>> I think it's worth changing this.
>>
>> if (arr)
>>
>> translating to
>>
>> if (arr.length == 0)
>>
>> Is immediately obvious for anyone coming from at least a Python
>> background. I have implemented my own hashmaps in a similar 
>> way.
>> For my maps, the length is stored in the map so it can be
>> retrieved in O(1) time, and cast(bool) results in map.length ==
>> 0. (This extends also to empty sets.)
>>
>> If we need a deprecation path, we can do it. We just warn about
>> if (arr) for a while, so you are told to use if(arr.length == 
>> 0)
>> or if (arr.ptr is null) for a while, then we change the 
>> behaviour
>> in another release.
>
> I agree with the change, because the current behavior is 
> error-prone.
> However, I'd just as soon leave if(arr) as illegal so that 
> there's no
> confusion over it later. Just because one set of folks think 
> that if(arr) is
> clearly equivalant to if(arr.length != 0) doesn't mean another 
> set of folks
> will - especially if it's based on what other languages are up 
> to. For
> instance, while python folks might think that it would be 
> intuitive if
> if(arr) were equivalent to if(arr.length != 0), the C folks 
> would think that
> the current behavior of it being equivalent to if(arr is null) 
> would be more
> intuitive, since they're used to thinking of arrays as 
> pointers. By simply
> forcing folks to be explicit and say if(arr.length != 0) or 
> if(arr is null),
> we avoid the problem entirely.
>
> - Jonathan M Davis

Unfortunately it also disables this very useful idiom:

if(auto name = getName())

I.e. declaration and conditional in one.


More information about the Digitalmars-d mailing list