Feature request - simpler constructors

Bruno Medeiros brunodomedeiros+spam at com.gmail
Fri Sep 21 06:31:02 PDT 2007


kris wrote:
> Janice Caron wrote:
>> On 9/21/07, Walter Bright <newshound1 at digitalmars.com> wrote:
>>> Janice Caron wrote:
>>>> Please could we let
>>> I think it's a good idea, but I think using the function signature for
>>> it probably is not the best idea (as the function signature is for the
>>> interface, not the internals).
>>
>> Ah, well since that initial idea, lots of people have come up with
>> different alternatives, and the one suggested by Regan Heath is really
>> nice:
>>
>> class Point {
>>   int x;
>>   int y;
>>   int foo;  //not implicitly assigned any value
>>
>>   this(int x, int y, int bar):(x,y)  //bar is not assigned to anything
>>   {
>>     //super constructor calls go here
>>     //members are assigned here (_after_ calling super)
>>     //first line of user code goes here
>>     if (x > 5) {}  //refers to member 'x' not parameter 'x'
>>   }
>> }
>>
>> It's sort of similar to C++'s approach, but less typing and you don't
>> have to pick two different names for each variable, and if you wrote
>> the colon bit on the next line, it wouldn't be in the function
>> signature. (And if you didn't like the overuse of colon, you could
>> always use a keyword like you do for in, out and body).
>>
>> What I like about it is that you can do this:
>>
>>   this(int x, int y, int bar):(y,x)  //first assign y, then assign x
>>
>> in case there are side-effects to assignment order. Even better would
>> be to allow
>>
>>   this(int x, int y, int bar):(...)
>>
>> to be equivalent to
>>
>>   this(int x, int y, int bar):(x,y,bar)
>>
>> as between them, that set of possibilities seems to cover every need
>> suggested so far, including your need of not using the function
>> signature.
> 
> 
> Wow
> 
> All of that extra learning, indirection, and potential for confusion 
> just to avoid typing a relatively minuscule number of characters within 
> the ctor of a class:
> 
> # this.x = x, this.y = y;
> 
> I'm just knocked out. Really.
> 
> Here's a thought for everyone to consider. Please take a look at a large 
> and /practical/ body of code, written in D, by capable programmers, and 
> actually count the number of times this would even be applied? Now, take 
> that number and calculate a percentage against the size of the code body.
> 
> There's plenty of code in dsource to validate this notion against, 
> rather than speculating on a fictional basis.
> 
> FWIW: I'm quite familiar with at least two rather large bodies of code 
> there, and I can take a quick guess that neither body would apply 
> something like this even once, because there's simply no need for it. 
> Naturally, that doesn't cover every scenario or even a wide set of 
> tastes. However, it does indicate rather well that the notably few 
> "speshul" cases where this /might/ ever get used would likely cause 
> confusion to the reader or maintainer: *because it's not used often 
> enough to remember*
> 
> That spells "Feature Creep to The Max"
> 
> Just wow

I've often been running into this situation of creating constructors 
that assign their parameters to fields, but still I agree that it 
doesn't seem worth it to add new syntax just for this minor issue, at 
least not any of the syntax proposals presented here.
I can't argue any further other than re-state that I'm on the side that 
thinks the language should be kept _as simple as reasonable_. And this 
goes regardless of the fact that D has meta-programming capabilities 
that could allow implementing some feature like this outside of the 
language itself.

-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d mailing list