DIP23 Counter Proposal
Geancarlo Rocha
geancarlo.rocha at gmail.com
Thu Feb 7 13:16:15 PST 2013
In C#, they have introduced automatic properties for that purpose
of "initial encapsulation":
public int i { get; set; } //get and set can be modified with
private etc
Then the getter and setter methods are automatically implemented.
I'm not closely following the discussions involved in the
re-design of properties, but I disagree with the people that
believe properties are glorified fields. IMO, they are
essentially functions, accessed like fields, that can set and/or
expose state. I'm also against 2-parametrized properties btw.
Example: define a interface for geometric figures with a "area"
property and then implement it for square, circle, hexagon,
triangle etc
On Thursday, 7 February 2013 at 20:26:10 UTC, Jonathan M Davis
wrote:
> It works as long as you can limit the variable in some way. But
> I believe that
> the main purpose in using public variables rather than actual
> property
> functions when all they would do is get or set the variable is
> to avoid lots
> of boilerplate code. It's incredibly common to get stuff like
>
> struct S
> {
> int i() @safe const pure nothrow
> { return _i; }
>
> int i(int value) @safe pure nothrow
> { return _i = value; }
>
> private int _i;
> }
>
> That's a lot of extra code whose only benefit is encapsulation.
> So, it would be
> great if you could just do
>
> struct S
> {
> int i;
> }
>
> And with the ability to replace the variable with a property
> function later if
> it ever needs to do more than just get or set makes it so that
> encapsulation
> isn't a problem - except for the fact that there are certain
> operations that
> you can do on a variable that you can't do on a property
> function (e.g. taking
> its address or passing it by ref). Simply making it so that
> doing
>
> struct S
> {
> @property int i;
> }
>
> lowered into something like the first example would allow you
> to avoid all of
> that boilerplate code and still have full encapsulation.
>
> It's definitely true that you can never make a property
> function completely
> emulate a variable, but all of the boilerplate required for
> simple getters and
> setters is kind of ridiculous. I believe that avoiding that is
> the primary
> reason that people want to be able to swap between variables
> and property
> functions, and with a small addition to the language, we can
> obviate that
> boilerplate.
>
> - Jonathan M Davis
More information about the Digitalmars-d
mailing list