References in D

Franciszek Czekała" <home at valentimex.com> Franciszek Czekała" <home at valentimex.com>
Wed Oct 3 09:12:02 PDT 2012


On Wednesday, 3 October 2012 at 14:49:36 UTC, Simen Kjaeraas 
wrote:
> On 2012-56-03 14:10,  wrote:
>
>> The need of using null: Every type needs a default value.
>
> Good gods, are we not done with this strawman yet?
>
> No, not all types need a default value. In fact, for some 
> types, it is
> much better that they don't.
>
>
>> Consider my board example: with null standing for "empty cell" 
>> when a new board is created as an array it is by default empty 
>> -> in a meaningful state (think of games like Go, etc).
>
> Yes, null is useful. Nobody is trying to take null away from 
> you.
>
> What we want is the ability to say 'this can never be null', so 
> that we
> don't need to check for null over and over.
>
>
>> And at any rate you are going to use a property/function like 
>> IsEmpty to check for empty cells. Why should it be a problem 
>> to implement it by comparing with null?
>
> This is not what non-nullable references are about.
>
> When not to use non-nullable references:
>  - When the absence of a value is a valid value.
> Example:
>  - Chess board boxes.
>
> When to use non-nullable references:
>  - When the absence of a value is not a valid value.
> Example:
>  - RenderFoo(NotNull!Foo)
>
>
>> Without null references you will end up defining "null" 
>> objects all over the place (and sometimes it may just be 
>> impossible when all values are meaningful).
>
> No. Please read more about non-nullable references.
>
>
>> Then you will have to store them globally and compare 
>> everything with these objects (named like NullBoard, 
>> NullPiece, NullPawn, etc, etc because it is ah so much better 
>> than just using a single keyword null) and if you forget your 
>> program will silently churn out garbage. With plain null 
>> references at least you would get an exception. I'd rather see 
>> an exception than have a program running smoothly with 
>> nonsensical results. Like seeing pieces vanishing because they 
>> are being captured with a "null" piece which I forgot to test 
>> for being "null". Because, you know, you will still have to 
>> test conditions in your program to make it meaningful, except 
>> that it may be a lot more troublesome when your program grows 
>> x2 in size because of all those "safety" mechanisms.
>
> This... Please... Please, just read more about the topic before
> commenting. Please.

> When to use non-nullable references:
>  - When the absence of a value is not a valid value.

As my comments indicated : the presence of a value does not 
guarantee a valid value by itself. The C++ declaration int n; 
introduces a value, good luck using it. In short, having null 
references is useful (a value outside of the type cannot be 
introduced easily unless the language gives a hand, check eof() 
in C++ character_traits), while forcing non-null references 
hardly offers any significant advantage. Not enough to justify 
complicating the syntax of the language to have it both ways.


More information about the Digitalmars-d mailing list