if(arr) now a warning

Daniel Kozák via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 10 02:54:51 PDT 2015


On Fri, 10 Apr 2015 09:35:43 +0000
John Colvin via Digitalmars-d <digitalmars-d at puremagic.com> wrote:

> 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
> 
> As others have mentioned, why not make if(arr) be equivalent to 
> if(arr.length)? It seems that's what everyone actually wants when 
> they type it.

Change semantic is not good idea at all


More information about the Digitalmars-d mailing list