On 2011-03-05 18:42:26 -0500, dsimcha <[email protected]> said:

This is an extreme corner case, especially if a one-way semantic @property syntax is available to work around it. The percentage of functions that return callables is very small, and of these the percentage that would forget @property is probably very small. I'd rather bug-proneness in a ridiculous corner case than breaking tons of existing code code and losing a nice feature in the common case.

The percentage of functions that return a callable is very small until you go to template land. I can easily make a container or a range of delegates, and if someone somewhere forgot to make 'front' a property in the container, in the container's range or in one of the filter range layered on top of it, then writing 'front()' to call the front delegate becomes unreliable. Is it a corner case? Yes. Is it ridiculous to expect the language to detect rare but hard to find bugs? No. Is it worth it in this case? I think so.


That said, () being optional doesn't help you use setters with chaining.
You'd have to not label your setters with @property for them to work
with chaining, unless you want to play with a lot of nested parenthesis.

(((Graph().title = abc).xTitle = def).yTitle = hij);

Wow, that looks almost like Objective-C!

Right. The point is that I can do the same thing with either property syntax or with chaining. The choice is up to me as the caller, if the API designer is ok with allowing this choice.

Allowing optional '()' and allowing optional '=' are two different things. But contrary to optional '()' I don't see much of a problem with '=' as there's no ambiguity possible. It just looks a little strange to have a @property attribute and not restrict the property assignment syntax to it.

--
Michel Fortin
[email protected]
http://michelf.com/

Reply via email to