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