On Saturday, 23 January 2016 at 15:34:00 UTC, tcak wrote:
On Saturday, 23 January 2016 at 14:19:03 UTC, Jacob Carlborg
wrote:
This is mostly to prevent ugly hacks like Flag [1].
http://wiki.dlang.org/DIP88
[1] https://dlang.org/phobos/std_typecons.html#.Flag
Without making things any complex, the simplest thought of mine
is:
Keep everything same. But allow caller to put name of parameter
front its value wherever desired.
Let's say,
Rect createRect(int x, int y, int width, int height);
So you could call it like:
createRect( 10, 20, width: 200, height: 500 );
I concur, the additional syntax for declaring functions that take
named parameters is entirely extraneous. For the most part, it
just complicates implementing the feature by adding additional
considerations in regards to how tuples would represent the set
of types,
ie. ParameterTypeTuple!foo where foo(int a:, int b:)
For the most part, I wouldn't be opposed to all functions
accepting this syntax, although there still is the consideration
of how the call is handled. Notably, is the named-parameter an
expression of it's own that is only valid (or only meaningful) in
the context of a function or constructor call? Otherwise, we
still have the problem of how named-parameters are stored in
alias sequences.
Also as a minor note, I don't really understand the case for
parameter reordering. Typically speaking, the use case for named
parameters is to allow calling a function (or constructing and
object) without knowledge or concerns for what order the
parameters are expected in. Otherwise, the syntax is largely just
irrelevant. It simply adds additional cruft without any gain from
doing so.