new DIP5: Properties 2
Benji Smith
dlanguage at benjismith.net
Mon Jul 27 18:33:21 PDT 2009
> On Mon, Jul 27, 2009 at 4:34 PM, Chad
>> This seems to me like it adds more syntactic clutter than adding a
>> keyword would:
>>
>> PropertyDecl:
>> PropertyGetter
>> PropertySetter
>>
>> PropertyGetter:
>> Type 'opGet_' Identifier '(' ')'
>>
>> PropertySetter:
>> Type 'opSet_' Identifier '(' Type ')'
>>
>>
Jarrett Billingsley wrote:
> Nono,
<snip>
> they're just functions with "magical" names.
I agree with Chad. The opGet_Xxxxx syntax is terrible, with both
syntactic and semantic clutter. To whit:
1) This convention has four syntactic parts: "op", "Get|Set", "_", and
an identifier. Adding a new keyword (like "property") would only add one
syntactic element to the declaration.
2) A property is not an operator. So the "op" prefix is lying to you.
3) The existence of "magical" identifiers complicates the language
design. Because the rules that apply to those magical identifiers is
different than the rules applying to non-magical identifiers.
There's nothing wrong with the mechanics of the proposal. I especially
like how it allows the getter/setter to have different protection
attributes, and that it allows each function to be overridden
separately. You could even implement the getter in a read-only
superclass and implement the setter in a read-write subclass. Nice!
But I think the same thing can be more elegantly written using the
"property" keyword:
private int _x;
public property int X() { return _x; }
protected property X(int value) { _x = value; }
The only disadvantage I see there is the introduction of a keyword. And
that's definitely a disadvantage. But, compared to the "op" syntax, I
think it's the lesser of two evils.
--benji
More information about the Digitalmars-d
mailing list