On Wednesday, March 21, 2012 15:54:51 Daniel Murphy wrote: > FWIW, I would rather see `if (array)` translated to `if (array.length)` and > this become the recomended way to check if an array is empty. Wouldn't that > remove the dependency on std.array for most of the cases?
The problem with checking whether length == 0 is that it's inefficient for some containers, so it's generally good practice to use empty rather than length. And while length == 0 is fine for arrays, it promotes bad habits in general, so I'm against it and think that code should pretty much always use empty rather than length == 0. if(array) is a bit different, because you're not specifically checking the length, but if(container) doesn't work in the general case, and stuff like if(array || cond) doesn't work. So, making if(array) be equivalent to if(array.length != 0) and if(!array.empty) rather than if(array !is null) may be a good idea, but it doesn't work in the general case. In the general case, you're still going to have to choose between length == 0 and empty, and I definitely think that empty is the correct choice, because it promotes good habits, whereas length == 0 promotes bad habits. So, there's value in putting empty in _object.d regardless of what happens with if. Now, I find that I use enough other stuff in std.array, that it always gets imported anyway, but I don't think that putting empty in _object.d is a bad idea. - Jonathan M Davis