The problem with D's properties

DigitalDesigns DigitalDesigns at gmail.com
Thu May 31 01:49:42 UTC 2018


https://dpaste.dzfl.pl/6c6e614b58ac

The problem given in the list, is that a ref getter is used when 
a setter does not exist. Why have a setter then?

One problem is that if the setter has different behavior than the 
getter there will be problems.

The other problem is that += modifies the value.

normally getters are thought to be immutable in the since that 
they just return a value.

but

a += will modify what a points to.

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.

any modifying operator should call the setter. This is precisely 
what "set mean".


a += b is suppose to be syntactic sugar for a = a + b, yet we get 
different behavior. In one case only a getter is called and in 
the second case the getter and then the setter.

How D currently handles this is wrong and error prone. Either 
depreciate the use of op assignments using properties or fix it! 
lvalues should ALWAYS use the setter, it makes no sense otherwise.





More information about the Digitalmars-d mailing list