On Tuesday, 4 December 2012 at 16:24:27 UTC, Minas Mina wrote:
Isn't it possible to have parentheses optional only for UFCS?

E.g.

Allow:
I 5.writeln

Dissallow:

void f()
{
        writeln("hi");
}

f; // this currently works


I don't know if this is possible to implement.


module main;

void f()
{
        writeln("hi");
}

main.f; // OK or not?

If we're to make the empty braces optional, we have to ask this question: What will enforcing the empty braces buy you?

Based on the comments so far, all that it does is tell you at a glance that the symbol is a function call. Without the braces you'll have to dig a little deeper into the code to figure it out. So the () effectively serves the purpose of a naming convention for functions. However as was pointed out in this thread, there are a few real situations where even with () enforcement, you still won't necessarily know what the symbol represents without digging into the code, for example if @property is enforced. There are arguments in favor of @property enforcement, which is to encourage the programmer to think in terms of making a function behave like a variable and nothing else. It also discourages dropping the () elsewhere. The argument against @property enforcement, is that it enforces a coding style on the programmer, which may be subjective, and not providing any real gain.

What "bad" thing does () enforcement do?

Based the comments, it seems that a lot of people really dislike the empty braces when chaining together multiple function calls, i.e., it looks ugly and is more effort for apparently no real gain, so it does not matter if they are UFCS calls or not, it's just ugly when chaining. The arguments against dropping the () when chaining, is that you loose the ability to see at a glance what is a function call and what is not, although with the exception of enforced @property functions.

I think the above sums up the arguments for and against, but maybe not.

--rt

Reply via email to