On Friday, 17 January 2014 at 08:13:05 UTC, Namespace wrote:
On Friday, 17 January 2014 at 03:02:57 UTC, inout wrote:
On Friday, 17 January 2014 at 02:52:15 UTC, bearophile wrote:
deadalnix:

Most object don't have a sensible init value. That is just hiding the problem under the carpet.

If there's desire to solve this problem I think that improving the type system to avoid nulls where they are not desired is better than having an init object.

So aren't not-nullable pointers and references a better solution?

Bye,
bearophile

This! Also, if anything, it's better to turn `init` into a method rather than an object. The following would work all of a sudden:

class Foo
{
   Bar bar = new Bar();
   int i = 42;

   Foo() {
      assert(bar !is null);
      assert(i == 42);
   }

   // auto-generated
   private final void init(Foo foo) {

      foo.bar = new Bar();
      foo.i = 42;
   }
}
That would be indeed a nice solution and would break AFAIK nothing. :)

But IMO even better would be something like this:
----
class A {
        int id;

        this(int id) {
                this.id = id;
        }

        static A init() {
                return new A(42);
        }
}

A a; /// <-- A a = A.init; --> A a = new A(42);
----
Define your own init method which initialize the object to not null.

Reply via email to