Flag proposal
Michel Fortin
michel.fortin at michelf.com
Fri Jun 10 12:12:38 PDT 2011
On 2011-06-10 14:52:53 -0400, Robert Clipsham <robert at octarineparrot.com> said:
> On 10/06/2011 19:06, Andrei Alexandrescu wrote:
>> Ugly is in the eye of the beholder, but I fail to see how the added
>> punctuation makes Flag!"param".yes significantly more verbose than param
>> : true.
>
> foo(param: true, otherParam: false);
> foo(Flag!"param".yes, Flag!"otherParam".no);
>
> I don't know about you, but I find the former is far more legible. I'd
> hate to see my code littered with Flag!"something".
I have to say I totally agree with Robert.
I agree with the need for a way to name parameters, but instantiating a
pseudo-boolean type from a template for each function parameter is
worse than the initial problem. Templates are already a difficult
concept to grasp for most people (because they're so abstract), we
really don't need to replace every boolean parameter with a template
type.
>> The problem that named parameters are still optional remains. Or we need
>> to add one extra language feature to specify required named parameters.
>
> void foo(bool param, bool otherParam, bool thisOneIsntRequired = false);
>
> Call it with or without named parameters, two are required, one is not.
>
> foo(otherParam: true, param: false);
> foo(true, false);
> foo(otherParam: true, param: false, thisOneIsntRequired: true);
And just try to think of the signature for the function above if it was
using Flag!
void foo(Flag!"param" param, Flag!"otherParam" otherParam,
Flag!"thisOneIsntRequired" thisOneIsntRequired =
Flag!"thisOneIsntRequired".no);
Do we really want to expose that in the documentation?
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list