if(arr) now a warning

Daniel Kozak via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 10 01:10:18 PDT 2015


On Thursday, 9 April 2015 at 20:59:00 UTC, Steven Schveighoffer 
wrote:
> A confusing and dangerous "feature" of D was to treat the 
> expression if(arr) as meaning if(arr.ptr).
>
> Anyone coming from any number of other languages may think that 
> if(arr) means "if arr has any elements". Typically one cares 
> what is inside an array, not where it lives.
>
> However, while checking to see if an array has elements is very 
> similar to checking for a null pointer (obviously, a null 
> pointer array should have no elements), it's not equivalent. 
> Therefore, when attempting to fix this confusion, we had to 
> disable the if(arr) check altogether. You must now specify what 
> part of the array you care about, if(arr.ptr) or if(arr.length).
>
> As usual with changes of this nature, there are differing 
> opinions, and differing styles. I personally never use null as 
> a special value for an array, but others do. They use if(arr) 
> to actually mean if(arr.ptr). For these cases, the update will 
> cause some amount of busywork changing these checks.
>
> But when updating Phobos to comply with this change, we found 
> several actual incorrect usages. So I think the change is worth 
> it, and not much busywork. YMMV.
>
> What do you think?
>
> references:
>
> https://issues.dlang.org/show_bug.cgi?id=4733
> https://github.com/D-Programming-Language/dmd/pull/2885
> https://github.com/D-Programming-Language/tools/pull/166
>
> -Steve

This change meens I had to rewrite almost 1k lines of code which 
almost every one has been wrong :D.

I have lot of code rewriten from php directly to D.

PHP:
http://sandbox.onlinephpfunctions.com/code/b75620f9714784bd888b365b963723a1dc773d08

D:
http://dpaste.dzfl.pl/89f762890526


More information about the Digitalmars-d mailing list