Non-ugly ways to implement a 'static' class or namespace?
H. S. Teoh
hsteoh at qfbox.info
Fri Jan 20 22:12:10 UTC 2023
On Fri, Jan 20, 2023 at 01:32:22PM -0800, Ali Çehreli via Digitalmars-d-learn wrote:
> On 1/20/23 07:01, torhu wrote:
>
> > But why not have drawLine just be a free function?
>
> Exactly.
>
> If I'm not mistaken, and please teach me if I am wrong, they are
> practically free functions in Java as well. That Java class is working
> as a namespace.
Exactly. Every time you see a static singleton class, you're essentially
looking at a namespace. Only, in OO circles non-class namespaces are
taboo, it's not OO-correct to call them what they are, instead you have
to do lip service to OO by calling them static singleton classes
instead. And free functions are taboo in OO; OO doctrine declares them
unclean affronts to OO purity and requires that you dress them in more
OO-appropriate clothing, like putting them inside a namesp^W excuse me,
static singleton class.
;-)
> So, the function above is the same as the following free-standing
> function in D, C++, C, and many other languages:
>
> void Algo_drawLine(Canvas c, Pos from, Pos to) { ...... };
[...]
That way of naming a global function is essentially a poor
man's^W^Wexcuse me, I mean, C's way of working around the lack of a
proper namespacing / module system. In D, we do have a proper module
system, so you could just call the function `drawLine` and put it in a
file named Algo.d, then you can just use D's symbol resolution rules to
disambiguate between Algo.drawLine and PersonalSpace.drawLine, for
example. :-P
T
--
Public parking: euphemism for paid parking. -- Flora
More information about the Digitalmars-d-learn
mailing list