On Sun, 27 Sep 2009 02:43:05 +0400, Denis Koroskin <2kor...@gmail.com> wrote:

On Sun, 27 Sep 2009 02:18:15 +0400, Walter Bright <newshou...@digitalmars.com> wrote:

Denis Koroskin wrote:
If you disallow null references what would "Object foo;" initialize to then?
Nothing. It's a compile-time error.

Should:

    int a;

be disallowed, too? If not (and explain why it should behave differently), what about:

    T a;

in generic code?

Functional languages don't distinguish between the two (reference or not). We were discussing "non-null by default"-references because it's far less radical change to a language that "non-null by default" for all types.

Once again, you are taking code out of the context. It is worthless to discuss "int a;" on its own. I'll try to but the context back and show a few concrete examples (where T is a generic type):

void foo()
{
     T t;
}

Results in: error (Unused variable 't').

T foo(bool someCondition)
{
     T t;
     if (someCondition) t = someInitializer();

     return t;
}

Results in: error (Use of potentially unassigned variable 't')

T foo(bool someCondition)
{
     T t;
     if (someCondition) t = someInitializer();
     else t = someOtherInitializer();

     return t;
}

Results in: successful compilation

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
}

Reply via email to