property syntax strawman

Steven Schveighoffer schveiguy at yahoo.com
Tue Aug 4 06:41:43 PDT 2009


On Sun, 02 Aug 2009 03:43:43 -0400, Walter Bright  
<newshound1 at digitalmars.com> wrote:

> Having optional parentheses does lead to unresolvable ambiguities. How  
> much of a problem that really is is debatable, but let's assume it  
> should be resolved. To resolve it, a property must be distinguishable  
> from a regular function.
>
> One way is to simply add a "property" attribute keyword:
>
>    property bool empty() { ... }
>    property void empty(bool b) { ... }
>
> The problem is that:
>
> 1. there are a lot of keywords already
> 2. keywords are global things
>
> The alternative is to have a unique syntax for properties. Ideally, the  
> syntax should be intuitive and mimic its use. After much fiddling, and  
> based on n.g. suggestions, Andrei and I penciled in:
>
>    bool empty { ... }
>    void empty=(bool b) { ... }
>
> The only problem is when a declaration but not definition is desired:
>
>    bool empty;
>
> but oops! That defines a field. So we came up with essentially a hack:
>
>    bool empty{}
>
> i.e. the {} means the getter is declared, but defined elsewhere.
>
> What do you think?

I stated it elsewhere, but I'll bring it up to the front.

I don't think the getter syntax is viable without parentheses, since that  
precludes array properties, e.g.:

string asUpper(string s);

usage:

string s = "abcde".asUpper;

It wouldn't be possible to define this as a property using your syntax,  
unless you want to introduce a syntax for extending types...

-Steve




More information about the Digitalmars-d mailing list