The problem with @properties in D

Somedude lovelydear at mailmetrash.com
Tue Dec 13 04:25:10 PST 2011


Le 13/12/2011 01:25, Mehrdad a écrit :
> In every language I've seen that has "properties" (C#, Python), they are:
> 
>     - _Defined_ like methods
>     - _Used_ like variables
> 
> The trouble is, this isn't true with D.
> 
> Consider:
> 
> struct Struct
> {
>     int delegate() randgen1 = ...;
>     @property
>     int delegate() randgen2() { ... }
> }
> 
> Struct s;
> auto result = s.randgen2();    // This doesn't do the user expects
> 
> It is *not* possible, in D, to transparently use either one -- you have
> to treat properties, like methods, not like variables. Except that this
> is inconsistent -- in most other cases, you don't need to do that.
> 
> Or for example:
> 
> Struct s;
> auto a = &s.randgen1;
> auto b = &s.randgen2;  // Should be an error
> 
> IMO, properties should not be callable with parentheses at all.
> Something like C# -- they should generate getter and setter methods
> instead, or the like.
> Furthermore, taking the address of a property should only work if you
> can take the address of its _value_. If you need the address of the
> actual function, then I think a corresponding getter method might be
> easier to use.
> 
> It gets even /worse/ in templated code, because you have no idea whether
> an alias is referring to a property or to a variable or whatever.
> 
> Making this change would obviously break code, but the break is
> obviously _trivial_ to fix: just remove extra parentheses. It won't
> exactly be the kind of breakage that causes headaches.
> 
> So should this be fixed?

My question is: what is the use case for properties in D ?


More information about the Digitalmars-d mailing list