Empty VS null array?
Max Samukha
maxsamukha at gmail.com
Fri Oct 18 09:26:05 PDT 2013
On Friday, 18 October 2013 at 15:42:56 UTC, Andrei Alexandrescu
wrote:
> On 10/18/13 3:44 AM, Regan Heath wrote:
>> On Fri, 18 Oct 2013 00:32:46 +0100, H. S. Teoh
>> <hsteoh at quickfur.ath.cx>
>> wrote:
>>
>>> On Fri, Oct 18, 2013 at 01:27:33AM +0200, Adam D. Ruppe wrote:
>>>> On Thursday, 17 October 2013 at 23:12:03 UTC,
>>>> ProgrammingGhost
>>>> wrote:
>>>> >is null still treats [] as null.
>>>>
>>>> blah, you're right. It will at least distinguish it from an
>>>> empty
>>>> slice though (like arr[$..$]). I don't think there's any way
>>>> to tell
>>>> [] from null except typeof(null) at all. At runtime they're
>>>> both the
>>>> same: no contents, so null pointer and zero length.
>>>
>>> I think it's a mistake to rely on the distinction between
>>> null and
>>> non-null but empty arrays in D. They should be regarded as
>>> implementation details that user code shouldn't depend on. If
>>> you need
>>> to distinguish between arrays that are empty and arrays that
>>> are null,
>>> consider using Nullable!(T[]) instead.
>>
>> This comes up time and again. The use of, and ability to
>> distinguish
>> empty from null is very useful.
>
> I disagree.
>
>> Yes, you run the risk of things like
>> null pointer exceptions etc, but we have that risk now without
>> the
>> reward of being able to distinguish these cases.
>>
>> Take this simple design:
>>
>> string readline();
>>
>> This function would like to be able to:
>> - return null for EOF
>> - return [] for a blank line
>
> That's bad API design, pure and simple. The function should
> e.g. return the string including the line terminator, and only
> return an empty (or null) string upon EOF.
>
>
> Andrei
*That's* bad API design. readln should be symmetrical to writeln,
not write. And about preserving the exact representation of new
lines, readln/writeln shouldn't preserve that, pure and simple.
More information about the Digitalmars-d
mailing list