Counterproposal for extending static members and constructors
Jonathan M Davis
jmdavisProg at gmx.com
Thu Jul 12 16:42:10 PDT 2012
On Thursday, July 12, 2012 21:23:56 Christophe Travert wrote:
> "Jonathan M Davis" , dans le message (digitalmars.D:172156), a écrit :
> > On Thursday, July 12, 2012 18:25:03 David Piepgrass wrote:
> >> I'm putting this in a separate thread from
> >> http://forum.dlang.org/thread/uufohvapbyceuaylostl@forum.dlang.org
> >> because my counterproposal brings up a new issue, which could be
> >> summarized as "Constructors Considered Harmful":
> >>
> >> http://d.puremagic.com/issues/show_bug.cgi?id=8381
> >
> > I think that adding constructors to a type from an external source is
> > downright evil. It breaks encapsulation. I should be able to constrain
> > exactly how you construct my type. If you want to create a free function
> > (e.g. a factory function) which uses my constructors, fine. But I'm
> > completely against adding constructors externally.
>
> The proposal is not that add constructors. It is to create a free
> function (.make!Type(args)), that can called like a constructor, by
> writing Type(args). That does not break encapsulation.
But it _does_ make it look like you're using a constructor when you're not,
which I'm against regardless.
In any case, std.container already declares a make which encapsulates
constructing an object without caring whether it's a struct or class (since
some containers are one and some another), which I intend to move to
std.typecons and make work with all types. That seems a lot more useful to me
than trying to make a function act like a constructor when it's not - though I
guess that as long as you imported std.typecons, I would just be providing the
free function that your little constructor faking scheme needs.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list