calling functions without parentheses

Steven Schveighoffer schveiguy at yahoo.com
Mon Nov 8 12:44:34 PST 2010


On Mon, 08 Nov 2010 15:29:15 -0500, Adam Cigánek <adam.ciganek at gmail.com>  
wrote:

> Ok, thanks. I knew about @property, but not that it works even without
> it. Actually, is @property even needed? I think that the ability to
> call functions without parentheses could be useful for non-property
> like function as well:
>
>     widget.hide;
>
> instead of:
>
>     widget.hide();

The point is that parentheses imply a function, where lack-of implies  
property.  For example:

if(x.read)

Could mean, read something from x, see if it's valid, or check if x has  
been read.

With forcing omitting parentheses or using them, the author of x is able  
to keep code that uses his object consistent.  The only alternative to  
this is to make the function/property a compound word like 'isRead' or  
'readValue', and we are back to Java.

For functions that return no value, it's pretty obvious that those are  
functions and not properties.  I have proposed that it might be possible  
to allow omitting parentheses on parameter-less functions that return  
void, but I have no idea if that will be implemented.

> The empty parentheses are just noise anyway. Unless it would conflict
> with something else. But the only thing that comes to my mind is if
> one wants to get the function itself, not call it. But that's what the
> & operator is for anyway:
>
>     button.onClick = &widget.hide;

When the compiler is changed to require omission of parentheses for  
properties, you will not be able to get the address of the function via  
the & operator.  This is a limitation of the requirement.  Otherwise, if  
the property returns an lvalue, how do you know what the user wants, an  
address to the lvalue or the function address?

I've proposed to work around this using __traits syntax:

auto dg = __traits(getDelegate, x.read);

Haven't got any feedback on that idea.  It could also make getting  
delegates to specific overloads much more friendly.

-Steve


More information about the Digitalmars-d-learn mailing list