Pretty please: Named arguments

Jonathan M Davis jmdavisProg at gmx.com
Mon Feb 28 13:50:52 PST 2011


On Monday, February 28, 2011 13:38:34 Don wrote:
> spir wrote:
> > On 02/28/2011 07:51 PM, Jonathan M Davis wrote:
> >> I'm not entirely against named arguments being in D, however I do
> >> think that any
> >> functions that actually need them should be refactored anyway.
> 
> I agree.
> CreateFont() in the Windows API, I'm looking at you. (For Linux people,
> that function has about 12 parameters).
> 
> > ???
> > 
> >> In actuality, if I were to vote on whether named arguments should be
> >> in the
> >> language, I would definitely vote against it (I just plain don't want
> >> the code
> >> clutter,  [...]
> > 
> > Just don't use them!
> 
> You don't have that option. At least, if you're a library developer, you
> don't. (I'm a bit sick of people saying "you don't have to use it if you
> don't want to" in language design. If it is in the language, you don't
> have a choice. You will encounter it).
> 
> There are a couple of things that I really, really don't like about the
> names argument idea:
> 1. It makes parameter names part of the API.
> Providing no way for the function writer to control whether it is part
> of the API or not, and especially, doing it retrospectively, strikes me
> as extremely rude.
> 
> 2. It introduces a different syntax for calling a function.
> foo(4, 5);
> foo(x: 4, y: 5);
> They look different, but they do exactly the same thing. I don't like
> that redundancy.
> 
> 
> Especially since, as far as I can tell, the named arguments are just
> comments (which the compiler can check).
> If so, a syntax like this would be possible, with no language change at
> all:
> 
> pragma(namedarguments); // applies to whole module
> 
> foo(/*x*/ 4, /*y*/ 5);
> 
> ---> if a function parameter has a comment which forms a valid
> identifier, it's a named parameter.
> 
> But I still don't see the need for this feature. Aren't people using
> IDEs where the function signature (with parameter names) pops up when
> you're entering the function, and when you move the mouse over the
> function call?
> And if you really want to see them all the time, why not build that
> feature into the IDE?
> ("hit ctrl-f9 to show all parameter names, hit it again to hide them").

I agree with pretty much everything said here. However, as I understand it, 
named parameters (at least as they work in Python) would allow for you to 
reorder parameters and give values for paramters which are normally default 
parameters without giving values for the default paramters before them, and 
those changes could not be dealt with by comments. However, I consider them to 
be a big _problem_, not a feature - _especially_ the ability to rearrange the 
function arguments. All of a sudden you could have

foo(4, 5);
foo(x : 4, y : 5);
foo(y : 5, X : 4);

all making _exactly_ the same function call. That seem _very_ bug-prone and 
confusing to me. foo(x : 4, y : 5) was bad enough, but allowing foo(y : 5, x : 
4)? Not good. The amount of effort to understand the code becomes considerably 
higher. You could be very familiar with foo and know exactly what parameters it 
takes and totally mistake what it's really getting passed, because the arguments 
were flipped in comparison to the function parameters.

I agree with Don. I think that named parameters would cause far more 
intellectual overhead and problems than they'd solve.

- Jonathan M Davis

- Jonathan M Davis


More information about the Digitalmars-d mailing list