How to allow +=, -=, etc operators and keep encapsulation?
evilrat
evilrat666 at gmail.com
Tue Apr 13 05:36:48 UTC 2021
On Monday, 12 April 2021 at 18:16:14 UTC, Jack wrote:
> Give this class:
>
> ```d
> class A
> {
> int X() { return x; }
> int X(int v) { return x = v;}
>
> private int x;
> }
> ```
>
> I'd like to allow use ```+=```, ```-=``` operators on ```X()```
> and keep encapsulation. What's a somehow elegant way to do that?
I assume you know what you are doing, right?
In this specific case I would say you can probably stick with it
as is since you can have value checks in getter/setter, you can
validate and correct values before it mess up the internal state,
and calculate X without exposing internal state (today it may be
int x, tomorrow you change it to be stored as string, who
knows...).
But this example doesn't really tell if it's acceptable in what
you are trying to achieve.
Otherwise:
What you need is called abstraction, you provide high level
interface to your problem without exposing internal state which
is implementation detail, which gives you freedom to modify
internal logic without breaking everyone's code that consume your
interface.
Assuming A is some special scalar type you just implement all
operations in a way that makes it only relevant as a whole.
Otherwise if you still need to peek on its private members you
have leaky abstractions (it is called feature envy).
More information about the Digitalmars-d-learn
mailing list