The problem with D's properties
Neia Neutuladh
neia at ikeran.org
Thu May 31 02:50:52 UTC 2018
On Thursday, 31 May 2018 at 01:49:42 UTC, DigitalDesigns wrote:
> Using setters, we might want to trigger an event when the value
> changes. But since the getter is used and can modify the event
> won't be triggered.
>
> This is a bad design.
Here's similar bad design:
---
class Int
{
public int value;
}
class Holder
{
private Int _prop = new Int(10);
public Int prop() { return _prop; }
public void prop(Int value)
{
assert(value.value == 10);
_prop = value;
}
}
Holder a = new Holder();
a.prop().value = 9;
---
I broke an invariant and there's no warning about it. D's
properties are indeed broken!
Wait, no, that was Java. I mean, C#. Actually, I messed up some
-> vs . and missed a couple pointers and it's C++. No, wait, I
think it's Dart. Or maybe a new version of Javascript? I can't
keep up with ECMA.
The problem is that mutable getters and validating setters don't
mix. This is easy enough to fix in your code: change `T getter()`
to `const(T) getter()`.
More information about the Digitalmars-d
mailing list