On Thursday, 24 January 2013 at 08:41:34 UTC, Jacob Carlborg wrote:
On 2013-01-23 22:59, monarch_dodra wrote:

In this context, what does it mean then to have something be "a property" ?

I think we should remember what "@property" (as I understood it) is meant for: a function that can emulate being a object. The de-facto
example being "front".

It's for a method emulating being a field/public instance variable.

The "final" objective (as I understood it), is that you can publish your interface, and later, swap object/members for functions (and vice versa).

You cannot do this in D. There are at least two issues:

1. You cannot replace a non-final property, i.e. a method, with a field. Someone might have overridden the method in a subclass. In other languages like Scala a public instance variable is implemented as a method. In these cases you can switch freely between a property and an instance variable.

Ture, it *is* a one way street, but would at least be a street none the less.

Imagine you used to have a field in the base class "myInt", but now you need a virtual myInt. You can replace your field with a virtual property that returns by ref. Your old code:

//----
int* p = &myClass.myInt;
//----

Will still work, but the actual field will be resolved at runtime. This does require my "point 2" to be implemented though: You can't take the address of a property.

If "myInt" was implemented as a simple function, here, you'd end up taking the address of the function myInt, and break code.

2. There are some issues with fields of a struct type being changed to a property, since they are usually passed by value. Example:

They shouldn't have to. That'd be an interface change. If you do that, then breakage is inevitable, property or no.

If you instead return by reference it will work, but then you can also set "bar" directly, bypassing the setter.

I think this is a limitation. If bar is a property, and has a setter, then "bar = 5" should *always* call the setter, regardless of ref or not.

IMO, it not currently doing so is a limitation

Reply via email to