Ary Borenszweig Wrote: > Alex Burton wrote: > > I think it makes no sense to have nullable pointers in a high level > > language like D. > > > > In D : > > > > X x = new X; > > This is a bit redundant, if we take away the ability to write X x; to mean > > X x = 0; then we can have X x; mean X x = new X; > > If the class has a ctor then we can write X x(32); instead of X x = new > > X(32); > > Only when the types of the pointer and class are different do we need to > > write X x = new Y; > > We can do this syntactically in D because classes cannot be instantiated on > > the stack (unless scope is used, which I have found a bit pointless, as > > members are not scope so no deterministic dtor) > > > > This makes the code much less verbose and allows code to change from X > > being a struct to X being a class without having to go around and change > > all the X x; to X = new X; > > > > As I said in the nullable types thread: > > Passing 0 or 0x012345A or anything else that is not a pointer to an > > instance of X to a variable declared as X x is the same as mixing in a > > bicycle when a recipe asks for a cup of olive oil. > > > > There are much better, and less error prone ways to write code in a high > > level language than allowing null pointers. > > > > Alex > > How would you do this? > > X x; > > if(someCondition) { > x = new SomeX(); > } else { > x = new SomeOtherX(); > }
I would try to never write code like that. The reason being if the if statement becomes a bit more complicated you risk leaving x = 0; Better to write a small function: X getX(bool someCondition) { if(someCondition) { return new SomeX(); } else { return new SomeOtherX(); } } That way the compiler will have to tell you if X can be possibly returned null. Alex