Setter chaining
Steven Schveighoffer
schveiguy at yahoo.com
Wed May 30 15:46:36 UTC 2018
On 5/30/18 10:49 AM, DigitalDesigns wrote:
> Does it sound good?
>
> class X
> {
> double x;
> @property X foo(double y) { x = y; return this; }
>
> @property X bar(double y) { x = y + 5; return this; }
> }
>
> void main()
> {
> X x = new X();
> x.foo(3).bar(4);
> }
>
>
> It sort of emulates UFCS but I'm not sure if it's more trouble than it's
> worth.
>
>
> I figure it would be better than just returning void as it provides the
> option to chain but not sure if it will come back to bite me.
Yes, I do this kind of stuff, but you need to word your functions correctly.
I would avoid @property there, as this implies you should use it like:
x.foo = 5;
and if you return a reference to the type itself, it will read weird if
you do it that way:
auto five = (x.foo = 5);
Here the name of the function is really really important.
In my use case, I am kind of using it in an SQL builder type, where each
time you call a method it adds some piece of the query. Like:
auto query = table.select("id, name").where("foo = 5").orderBy("name");
-Steve
More information about the Digitalmars-d-learn
mailing list