Why is Phobos `Flag` so overthought ?

cc cc at nevernet.com
Thu May 9 13:40:56 UTC 2024


On Wednesday, 8 May 2024 at 10:24:07 UTC, Nick Treleaven wrote:
> On Wednesday, 8 May 2024 at 04:27:13 UTC, cc wrote:
>> It doesn't allow a simple boolean to be used as an argument, 
>> or any other Flag as they are different instantiations of a 
>> template rather than equivalent aliases.
>> It is however awful, cumbersome, annoying design and needs to 
>> be completely phased out now that we have named arguments.
>
> Flag enforces that the argument says what it relates to. `true` 
> does not say what it relates to. Named arguments are optional, 
> so I don't see how they could make Flag redundant.

It's pointless mandatory verbosity.  StopWatch ctor only takes 
one boolean argument.  It doesn't *need* to specify what it 
relates to.  You either already know, or you have to look it up 
anyway.  Flags made sense when you might get the order of 
multiple bools confused, but if there's only one, *or* if you can 
use named arguments to avoid ambiguity, there's no point in 
demanding every parameter be a unique type.  It's easy to 
remember I can pass a bool to a StopWatch to autostart it.  It's 
less easy to remember that a specific unique type needs to be 
used, and remembering whether the name/casing of that type was 
Start, StartNow, StartAuto, Autostart, AutoStart, autostart, 
autoStart, etc.  We have a tool in our box already called `true` 
and that solves the problem.  If we had to type out the full name 
of every argument passed to every function ever written we may as 
well just adopt ObjC Cocoa style and call it 
StopWatchWithAutoStartBool().


More information about the Digitalmars-d-learn mailing list