On 27/08/2018 12:51 PM, SG wrote:
On Sunday, 26 August 2018 at 16:39:53 UTC, rikki cattermole wrote:
UFCS function called isNull.
e.g.
import std.traits : isPointer;
bool isNull(T)(T value) if (is(T == class) || isPointer!T) {
return value is null;
}
Hi Rikki,
I'm still confused, I want to create a extension for checking null for
every type, so in D I'll need to handle each case with Templates?
Templates make it the easiest way, since common patterns, like arrays,
classes and pointers have the exact same null check syntax.
Because in C# I just need to compare an object/variable with null,
x == null;
myObject == null;
myObject.i == null;
myStruct == null;
myStruct.j == null;
This works fine in C#.
That code is only for classes. C# also has structs which are a value
type. Which it would not work for.
But again, in D I'll need the check the type? Is possible to make one
Template for all cases?
The code below works, but I don't think this is a right thing to do, right?
You don't need isNull function for Nullable because it has a method
called it. That will be preferred (hence I specifically used isNull as
the name).
For Variant, use hasValue.
bool isNull(Variant value) {
return !value.hasValue;
}
Writing a Unified Function Call Syntax function isn't really an
extension. You're defining a function that is to be preferred when you
ask for a method of the same name. So that it appears as if it was
actually described as a method instead of a free-function (not attached
to class/interface/struct/union).