On Monday, 21 May 2018 at 14:30:21 UTC, KingJoffrey wrote:
On Monday, 21 May 2018 at 13:39:12 UTC, Sjoerd Nijboer wrote:
While you might say that a unittest shouldn't acces private
members and only public members, there are plenty of testcases
where one would want to write a unittest to set a given
variable via public function and then test if the appropriate
private fields are properly set. While this sounds like a
trivial usecase I believe it to be a verry big one in practice
since it removes a lot of boilerplate code from your
unit-tests, together with exposing the innards of a class's
implementation to the outside world just so you can unit-test
it.
I have to ask, why isn't that unittest your talking about,
within the scope of the class? Why is it outside the class,
testing private innards of the class?
I have trouble getting my head around this.
This hypotetical unittest is testing a hypotetical class in a
hypotetical module with hypotetical properties.
Why is it outside the class? I don't know, maybe it needs access
to two classes which are defined in thesame module. But also out
of personal preference, I don't like random unittest declarations
inside my class. Regardless, I think it's important for unittests
to be able to do this.
The last point is something I don't like about OOP + TDD in
languages like C# or java and I think D has (accidentally)
solved this in a beautiful way, and I would dislike to see
this feature go.
I'm not sure I understand this. You mean you don't like
'private'?
You think an object doesn't have a right, to privacy?
Are you one of those facebook employees?
And who suggested getting rid of anything?
Nope, I'm simply a bystander who sees lack of class scope as a
"feature" of D that is usefull in some cases while not hurting
idiomatic OOP as long as you only define a single class (+
unittests) inside a module.
If you want that too but still want static functions outside
classes, you can mix in C# extension methods paradigm into D.
Which is why I don't see any reason to add this.
But besides that, I just wanted to put forward that we don't need
to do `private(this)` or `private(className)` if this ever became
a language feature because it would be confusing as to why it
could bind to class or struct scope but not to any other scope
and might as well introduce a new keyword which isn't regularly
used in other languages like `sealed` but could instead come up
with a new one.
I felt that my response was incomplete whitout adding I think
that the concept of a class private in D would not be a good idea.
Also, I would verry much much like it if you would not resort to
comparing me to "one of those facebook employees." It's just
setting a mood for the conversation which no one likes,
regardless what anyone thinks about facebook employees.