On Thursday, 25 May 2017 at 08:34:54 UTC, JN wrote:
One of my favourite language features of Dart (other one being
factory constructors) are auto-assign constructors, for example
(writing it in pseudo-D):
class Person
{
string name;
int age;
this(this.age, this.name);
}
would translate to
class Person
{
string name;
int age;
this(int age, string name)
{
this.age = age;
this.name = name;
}
}
It saves a lot of typing in the long run when doing lots of
OOP, is there a way to reproduce such behaviour using mixins? I
was thinking of some interface like:
class Person
{
string name;
int age;
mixin(AutoConstructor!(age, name));
}
but I don't know if that's even doable using mixins. Even
cooler might be something like an annotation (feels a bit
Lombok-like from Java):
@AutoConstructor
class Person
{
string name;
int age;
}
but I don't think it's doable in D right now.
I am not looking for code, I can try that myself, just asking
if such things are possible?
Not sure about classes (I don't use them much) but structs have
an automatically defined constructor. It is most definitely
possible to do that with a mixin template (I remember someone
recently showing autogenerating properties for readonly private
members, sorry don't have a link).
The UDA approach won't work because they are there for
reflection. You can generate code based on the presence (or
absence) of a UDA but you can't synthesise new methods with that
without forwarding from a wrapper.