Null references redux

Denis Koroskin 2korden at gmail.com
Sat Sep 26 16:18:51 PDT 2009


On Sun, 27 Sep 2009 02:49:06 +0400, Walter Bright  
<newshound1 at digitalmars.com> wrote:

> Denis Koroskin wrote:
>> On Sun, 27 Sep 2009 01:49:45 +0400, Walter Bright  
>> <newshound1 at digitalmars.com> wrote:
>>
>>> The problem with non-nullable references is what do they default to?  
>>> Some "nan" object? When you use a "nan" object, what should it do?  
>>> Throw an exception?
>>>
>>  Oh, my! You don't even know what a non-null default is!
>>  There is a Null Object pattern  
>> (http://en.wikipedia.org/wiki/Null_Object_pattern) - I guess that's  
>> what you are talking about, when you mean "nan object" - but it has  
>> little to do with non-null references.
>
> It's the black hole object. It prevents you from getting a seg fault,  
> but I see no rationale for expecting that an unexpected null object  
> always returning "I succeeded" means your program will operate correctly.
>
> The white hole object, of course, always throws an exception when it is  
> accessed. At least you know something went wrong - but you already have  
> that with null.
>
>
>> With non-null references, you don't have "wrong values", that throw an  
>> exception upon use (although it's clearly possible), you get a correct  
>> value.
>
> You're not getting a correct value, you're getting another default value.


I'm sorry but I can not continue discussion with you like that. You are  
not listening! You are not even trying to understand what I say. We are  
talking *completely* different things here.

Who the hell cares if it's a black or white as long as it is a hole  
object? I tell you that no one is gonna use it, because it's *much* easier  
to do everything right (i.e. initialize a reference to proper value) than  
create Hole classes for each of the class/interface. I can't even imagine  
anyone writing the code like this:

T someFunction(Args someArgs) {
     ISomeInterface someInterface = new  
BlackHoleOfSomeInterfaceThatAlwaysThrows(); // let's initialize that  
variable to some dumb value just to make compiler happy
     // rest of the method body
}

Novices, maybe. But professionals would never do that sin for sure.

*Please* let's go past that pattern, it really has nothing to do with  
proposed non-null by default references.

> If the logic of your program is expecting a prime number > 8, and the  
> null object returns 0, now what?
>

You are talking heresy here. I'm afraid you don't even know what you are  
talking about.

A) There is no such thing as null object. That's bullsh*t! No one ever  
proposed to use those, you did. And now you deny use of them and discuss  
how bad they are.
B) You can't call a function that accepts non-null T if you don't have a  
valid (i.e. non-null) T reference. End of story.

>> If an object may or may not have a valid value, you mark it as  
>> nullable. All the difference is that it's a non-default behavior,  
>> that's it. And a user is now warned, that an object may be not  
>> initialized.
>
> He isn't warned, that's just the problem. The null object happily says  
> "I succeeded" for all input and returns more default values and null  
> objects.
>

Please stop that "null object" pattern propaganda. Did you even read what  
I wrote?

I wrote: if a variable may be not initialized - no problem, make it  
nullable and assign a null! A user is now forced to check that variable  
against a null before dereference and must take appropriate actions if it  
is null.

> What happens if the output of your program then becomes a null object?  
> How are you going to go about tracing that back to its source? That's a  
> lot harder than working backwards from where a null exception originated.
>
> I used to work at Boeing designing critical flight systems. Absolutely  
> the WRONG failure mode is to pretend nothing went wrong and happily  
> return default values and show lovely green lights on the instrument  
> panel. The right thing is to immediately inform the pilot that something  
> went wrong and INSTANTLY SHUT THE BAD SYSTEM DOWN before it does  
> something really, really bad, because now it is in an unknown state. The  
> pilot then follows the procedure he's trained to, such as engage the  
> backup.
>
> A null pointer exception fits right in with that philosophy.
>
> You could think of null exceptions like pain - sure it's unpleasant, but  
> people who feel no pain constantly injure themselves and don't live very  
> long. When I went to the dentist as a kid for the first time, he shot my  
> cheek full of novacaine. After the dental work, I went back to school. I  
> found to my amusement that if I chewed on my cheek, it didn't hurt.
>
> Boy was I sorry about that later <g>.

That's trolling, Walter. I'm sorry, but you are talking non-sense here.
Once again, no one ever proposed use of null object pattern. You imagined  
it and now denying its use.



More information about the Digitalmars-d mailing list