W dniu 01.07.2013 03:35, Jonathan M Davis pisze:
On Monday, July 01, 2013 03:22:15 JS wrote:
struct Foo
{
      @property int data() { return m_data; } // read property
      @property int data(int value) { return m_data = value; } //
write property
      private: int m_data;
}

It would be nice if properties had an internal variable to use
instead of having to declare it explicitly:


struct Foo
{
      @property int data() { return data.value; } // read property
      @property int data(int value) { return data.value; } // write
property
}

This reduces code complexity. If a property does not use the
internal variable(which I signify by .value) then it does not add
any storage. This allows one to easily wrap fields into
properties without having to create private fields for each
property unless needed.

I believe that the way that this sort of enhancement has typically been
suggested is to do something like

public @property int value;

which would be lowered to something like

public @property int value() @safe const pure nothrow { return _value; }
public @property int value(int v) @safe pure nothrow { return _value = v; }
private int _value;

This is nice, and this pattern promotes overriding of properties.

And I think that that's clearer than your suggestion (it's definitely shorter).
It also doesn't require the compiler to infer anything about whether you meant
to have it create a variable or not. It simply tells the compiler what to do
in a more concise manner.

Yes, it's clearer and more importantly it doesn't hide aggregate fields inside methods. Data layout of an aggregate should be clear IMHO.

Reply via email to