On Monday, 14 December 2015 at 13:19:13 UTC, Martin6265 wrote:
I dont said C# is better, just missing some preferred stuffs from other languages. `.?` from C# is same thing as message passing in ObjC. (You can send message to invalid object without accessing null pointer). And I miss that stuff in D.

Maybe will create a new instance of T if T is null, right?

class Responder {
Responder m_parent;


void SetSomething(int a) {
m_parent.maybe.SetSomething(a);
}
}

So, this example will ends in infinite loop.
But I don't want to call SetSomething on m_parent if m_parent is null.

Despite the enthusiasm in the aforementioned topic and despite the obsession that "every other language feature can be transformed in a D library solution beacuse D is so powerful", the D monad-like implementation is incomplete and is not equivalent to the C# ? operator, it wrongly assumes a field as a result type. Compiling your example, will result in an error message - "no field SetSomething for Maybe" (or similar).

The D implementation will not create a new instance - it checks for typeof(null) - it will return typeof(Responder.SetSomething).init if SetSomething would be a field (which is not).

My advice is to stick to conditional code for now, not every other language feature can be translated.

A single suggestion your example code:

auto var = cast(FooBar)variable;
if (var !is null)
var.callMethod();

can be written as:

if (auto var = cast(Foobar)) var.callMethod();



Reply via email to