property syntax strawman

Ary Borenszweig ary at esperanto.org.ar
Sun Aug 2 09:09:31 PDT 2009


Andrei Alexandrescu escribió:
> Marianne Gagnon wrote:
>>> 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 liked the original idea... but this declaration syntax is a total 
>> can of worms. Like others pointed out, would the compiler 
>> automatically turn all functions with empty bodies into declarations? 
>> Would empty setters be considered a declaration? What if I actually 
>> *want*
>>  to use an empty body as definition? Or what if I accidentally leave a 
>> body empty when I didn't want to?
>>
>> Like someone else pointed out, existing keywords could be reused :
>>
>> bool empty
>> {
>>     in(bool value)
>>     {
>>         _my_empty = value;
>>     }
>>     out
>>     {
>>         return _my_empty;
>>     }
>> }
>>
>> I like this quite a bit.  I never wrote any compiler, granted, but I 
>> don't think it'd be that hard to implement - and doesn't introduce any 
>> new keyword.
> 
> Please, please, could we look at something that does NOT go through two 
> scopes to get to the code?
> 
>> Or, alternatively, if you really wish to keep them separate, bool 
>> empty= { ... } isn't intuitive, as Andrei pointed out, but is already 
>> less error-prone than the empty-body declaration idea I believe
> 
> I think void empty=(bool b) { ... } is a net win, which the forced bool 
> empty=() diminishes. It would be great to keep the setter and find 
> something as nice for a getter.
> 
> 
> Andrei

int =empty() { } // getter
int empty=(int value) { } // setter



More information about the Digitalmars-d mailing list