Null references (oh no, not again!)

Ary Borenszweig ary at esperanto.org.ar
Wed Mar 4 15:24:01 PST 2009


Walter Bright escribió:
> Ary Borenszweig wrote:
>> Walter Bright escribió:
>>> Ary Borenszweig wrote:
>>>> It's not like that. They don't require you to initialize a variable 
>>>> in it's initializer, but just before you read it for the fist time. 
>>>> That's very different.
>>>
>>> The only way to do that 100% reliably is to instrument the running code.
>>
>> Java does it on compile time.
> 
> Java is a severely constrained language. Even so, how does it do with this:
> 
> Foo f;
> if (x < 1) f = new Foo(1);
> else if (x >= 1) f = new Foo(2);
> f.member();

Whenever there are branches in code and a variable still doesn't have a 
value at that point:
  - if all branches assign a value to that variable, from now on the 
variable has a value
  - if not, at then end of the branches the variable still doesn't have 
a value

> 
> ? (You might ask who would write such, but sometimes the conditions are 
> much more complex, and/or are generated by generic code.)
> 
>> If it's done only for local variables then you don't need to 
>> instrument the running code.
> 
> How about this:
> 
> Foo f;
> bar(&f);
> 
> ? Or in another form:
> 
> bar(ref Foo f);
> Foo f;
> bar(f);
> 
> Java doesn't have ref parameters.

C# does have ref parameters and it also performs this kind of check. I 
just tried it and it says a parameter can't be passed by reference if it 
doesn't have a value assigned. So your first example should be an error.

The same should be applied for &references.

(in your first example, if you want to pass f by reference so that bar 
creates an instance of f, then it should be an out parameter).



More information about the Digitalmars-d mailing list