std.path review: update
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Mon Jul 18 07:18:26 PDT 2011
On Mon, 18 Jul 2011 14:23:18 +0200, torhu 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.
>
> As far as I can tell by the testing I've done, you can use a null string
> in every way that you can use an empty string, even append to it with
> ~=. The distinction between null and empty strings is significant in C
> and Java, but in D it's not, and the tiny difference that actually
> exists mainly serves to confuse people. It doesn't help that the actual
> differences are largely undocumented either.
>
> One difference is that a statically allocated empty string is null
> terminated, but I think that can be safely ignored in the case of return
> values.
True, but the question was not whether one should use null or "" for the
"nothing here" return value of a function. The question was whether the
function returning null should mean something different than it returning
"".
> By the way, did you read my post in the other thread?
Yes, I read it, but I forgot to answer. Sorry about that. I've answered
now.
-Lars
More information about the Digitalmars-d
mailing list