Auto constructor [Was: Archetype language]

Daniel Gibson metalcaedes at gmail.com
Sun Mar 20 20:52:37 PDT 2011


Am 21.03.2011 00:55, schrieb bearophile:
> Among the things I've listed about Archetype there's one interesting thing. Class instances aren't PODs, but sometimes I prefer reference semantics and to populate fields in a plain way, expecially for simple classes.
>
> Time ago I and other people have suggested a syntax like (this also to avoid a class of bugs http://d.puremagic.com/issues/show_bug.cgi?id=3878 ):
>
>
> class Foo {
>    string x;
>    int y = 1;
>    this(this.x, this.y) {}
> }
> void main() {
>    Foo f3 = new Foo("hello", 10);
> }
>

Yeah, I still like that idea ;)

>
> A simpler solution are classes with automatic constructors:
>
> class Foo {
>    string x;
>    int y = 1;
> }
> void main() {
>    Foo f1 = new Foo(); // Good
>    Foo f2 = new Foo("hello"); // Good
>    Foo f3 = new Foo("hello", 10); // Good
> }
>
>
> What kind of problems are caused by this? :-)
>

You'd have to know the order in that the members are defined in the 
class (and you may not change the order).
Just imagine
class Foo {
   int bla;
   int baz;
}

new Foo(42, 3); // what is bla, what is baz?

and then you decide "uh I'd prefer to have my class members ordered 
alphabetically" and *bamm* all you code silently breaks.

having a this(this.bla, this.baz) {} would clearly document which 
argument in the constructor belongs to which class member and the class 
members ordering wouldn't matter.

Cheers,
- Daniel


More information about the Digitalmars-d mailing list