Null references redux

downs default_357-line at yahoo.de
Sun Sep 27 04:05:55 PDT 2009


Denis Koroskin wrote:
> On Sun, 27 Sep 2009 03:01:48 +0400, Walter Bright
> <newshound1 at digitalmars.com> wrote:
> 
>> Denis Koroskin wrote:
>>> One more:
>>>  T foo(bool someCondition)
>>> {
>>>     T? t;
>>>     if (someCondition) t = someInitializer();
>>>     // ...
>>>      if (t.isNull) { // not initialized yet
>>>         // ...
>>>     }
>>>      return enforce(t); // throws if t is not initialized yet,
>>> because foo *must* return a valid value by a contract
>>> }
>>
>> It seems to me you've got null references there anyway?
>>
>> What would you do about:
>>
>>     T[] a;
>>     a[i] = foo();
>>
>> where you want to have unused slots be null (or empty, or nothing)?
> 
> Easy:
> 
> T? foo(); // returns valid object or a null
> 
> T?[] a;
> a[i] = foo();

The case of a non-null array is, I think, worthy of some more consideration.

These are the things that would not be possible with a non-nullable array:

- newing it
- setting .length to a greater value
- appending a nullable array of the same base type.

Basically, anything that may fill it with nulls.

The only two allowed instructions would be ~= NonNullable and ~= NonNullableArray. And it's good that way.



More information about the Digitalmars-d mailing list