On Saturday, 25 August 2018 at 19:16:26 UTC, Jacob Carlborg wrote:
On 2018-08-25 15:33, SG wrote:
Hi,

1) I program in C# and I'm wondering if there is something like ?? (Null-Coalescing Operator) in D? (I remember some proposals in the past).

Not in the language but it can be implemented as a library function by overloading "opDispatch". See [1] for an example.

[1] https://github.com/jacob-carlborg/dlp/blob/9d524e282803070022848c01cf6cd25a61025004/source/dlp/core/optional.d#L228-L238

That's the null propagation operator (?.). What SG asked for is the null-coalescing operator (??). Of course, this can also be implemented in D (albeit with a slight more horrible syntax):

struct NullCoalesce {
    static auto opBinaryRight(string op : "|", T)(T lhs) {
        return NullCoalesceImpl!T(lhs);
    }
}

alias NullCoalesce _;

struct NullCoalesceImpl(T) {
    T value;
    auto opBinary(string op = "|", R)(lazy R rhs) {
        if (value is null) return rhs;
        return value;
    }
}

unittest {
    int* a = null;
    int b = 3;
    assert(*(a |_| &b) == 3);
}

--
  Simen

Reply via email to