new DIP5: Properties 2
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Aug 1 17:48:58 PDT 2009
Sergey Gromov wrote:
> Fri, 31 Jul 2009 21:37:06 -0500, Andrei Alexandrescu wrote:
>
>> To clarify: if there was any extra checking by the compiler, any
>> guarantee that the feature would provide at all, I'd be glad to pay the
>> price of thinking more when putting together a design. But you want to
>> define a language feature that allows people to require "()" or not as
>> they please, and that's all. It's a frivolous detail to be spending time
>> on when designing an API. I simply don't believe that's good language
>> design.
>
> That's not "all." To me it's mostly maintainability.
>
> If there is a property 'foo' and you allow to set it both as 'foo = 5'
> and 'foo(5)' then somebody *will* use the foo(5) form. Making it hard,
> or even impossible for you, the maintainer, to switch from a property
> back to a regular field for 'foo'.
>
> If you allow to call function 'bar()' both with and without parentheses,
> and a project is maintained by more than one person, they *will* call it
> differently making the source look inconsistent.
>
> Dropping the 'omittable parentheses' thing happens to solve these, and
> the delegate return problem, and helps to disambiguate words with
> overloaded meanings.
Thanks for these great points. As an additional example, most ranges
define the method
bool empty() { ... }
whereas infinite ranges define the enum
enum bool empty = false;
It follows that if a range user wants to be compatible with finite and
infinite ranges, they always must use no "()". It would be nice if the
range's definition could enforce that.
Andrei
More information about the Digitalmars-d
mailing list