std.path review: update

Steven Schveighoffer schveiguy at yahoo.com
Mon Jul 18 10:41:53 PDT 2011


On Mon, 18 Jul 2011 08:23:18 -0400, torhu <no at spam.invalid> wrote:

> On 18.07.2011 11:42, Lars T. Kyllingstad wrote:
>> On Sun, 17 Jul 2011 22:38:43 -0700, Jonathan M Davis wrote:
>>
>>>  On Sunday 17 July 2011 22:08:27 Brian Schott wrote:
>>>>  The documentation comments for driveName say that the return value  
>>>> will
>>>>  be an empty string in some circumstances, but the code and unit tests
>>>>  both say that the behavior is to return null.
>>>
>>>  The fun part with that is that "" == null and a null string is empty  
>>> per
>>>  std.array.empty, so it _is_ the empty string. The only difference is
>>>  that "" !is null. So, if the function says that it returns null, then  
>>> it
>>>  needs to return null. Since it says that it returns the empty string,  
>>> it
>>>  could return either.
>>>
>>>  Now, in spite of all that, there's still a problem since the tests
>>>  verify that the return value is null, not empty. Either the
>>>  documentation should say that it returns null, or the tests should be
>>>  checking for empty, not null. But still, the documentation isn't
>>>  incorrect. Are the tests are perfectly valid, but they really  
>>> shouldn't
>>>  be testing for is null instead of empty when the function is supposed  
>>> to
>>>  return empty.
>>
>> Pending a decision on the null vs. empty issue, I have now standardised
>> on using empty() for testing whether functions return empty strings.
>
> I'd like to make a case for null as the 'nothing here' value.
>
> The advantage of using null is that all possible ways of testing for  
> 'nothingness' (is, ==, as a boolean condition, empty range) will work.  
> But if you return an empty string, you can't do 'str is null', because  
> that will be false.  With null there's just no doubt, and no way to get  
> the test wrong.

The one that's kind of nice is the if(path.extension), which reads not  
only much better than if(path.extension == null), but it's a very common  
idiom in many languages (using if to test a string's emptiness).  People  
are likely to get this wrong (in fact, it may make sense for *all* empty  
arrays to evaluate as false for an if condition).

I personally think if there's no real difference, returning null is the  
better option based on these points.

However, if there is some performance/maintenance advantage to not  
returning null, then just return an empty non-null array and specify in  
the API docs that the function returns an empty string.

-Steve


More information about the Digitalmars-d mailing list