if(arr) now a warning

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Thu Apr 9 13:59:00 PDT 2015


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


More information about the Digitalmars-d mailing list