chaining

Brian digitalmars at brianguertin.com
Fri Feb 27 03:02:10 PST 2009


On Thu, 26 Feb 2009 09:45:28 +0100, grauzone wrote:

> Brian wrote:
>> I want to use a chaining system for easy setting of object attributes,
>> which would work great for a single object, unfortunately derived
>> classes cannot inherit the chained functions implicitly, whats the best
>> way around this?
>> 
>> class Base {
>> 	int x;
>> 	Base foo(int x_) {
>> 		this.x = x_;
>> 		return this;
>> 	}
>> }
>> 
>> class Derived : Base {
>> 	Derived bar(int y_) {
>> 		return this;
>> 	}
>> }
>> 
>> // usage:
>> auto m = (new Derived).foo(10).bar(x); // bar can be accessed through
>> foo
> 
> Couldn't you just write the above example as:
> 
> auto m = new Derived;
> m.foo(10);
> m.bar(x);
> 
> This is actually much more readable: the reader doesn't need to know
> that the functions foo and bar return m; instead, the code uses m
> directly. Obviously, this is also simpler to implement than chaining.
> 
> I don't get why some people like chaining. Unlike in languages like C++,
> you can always use "auto" to keep the typing to a minimum. What more
> arguments are there for chaining?

your probably right.. it also looks simpler written out.

i do sort of use chaining to create dictionaries of variant/box objects, 
though it could probably just be a function with variable arguments. i 
think it looks neat.

sig.emit((new Message)
	("number", 24)
	("str", "hello")
	("obj", someobject)
	("and-so-on", [1,2,3])
	);


More information about the Digitalmars-d-learn mailing list