On Tuesday, 13 March 2018 at 06:03:11 UTC, Mike Parker wrote:
I think it's a great feature and I use it frequently. It's
allows more flexibility in class design. Without it, we'd need
another protection attribute to enable the concept of "private
to the module".
That's kind of my point. That's what I would have done, if for no
other reason, to prevent the same syntax from having different
semantics (when C++/C#/Java programmers come over to D).
And I switch between them all, and now, I have to remember D's
private memeber is something very different indeed.
In Java, it's recommended to manipulate private member
variables through their accessors even in methods of the same
class. I've always found that extreme.
Java is extreme in many ways ;-)
but at least, private member, is still a private member (to the
class).
If my private class memeber can be directly modified outside of
the class, then class encapsulation IS broken. Just saying, oh
no, it's module encapsulation you should be thinking about, seems
kinda strange, since we still use classes - which are their own
level of encapsulation. That's the whole point of them.