Named arguments
Andrey
andrey at kabylin.ru
Wed Oct 25 07:46:49 UTC 2017
On Tuesday, 24 October 2017 at 20:36:00 UTC, H. S. Teoh wrote:
> On Tue, Oct 24, 2017 at 01:22:41PM -0600, Jonathan M Davis via
> Digitalmars-d wrote: [...]
>> Personally, I don't want them in D. If you have enough
>> arguments that it matters, then the function probably has too
>> many parameters or too many similar parameters.
>
> If a function has too many parameters, or only a small subset
> of parameters need to be something other than some default
> value, or the set of parameters may change frequently, then my
> default approach is to abstract the parameters into a struct:
>
> struct OutputArgs {
> string filename;
> int width = 300;
> int height = 300;
> string fontDir = "/usr/share/local/fonts/arial.ttf";
> int fontSize = 12;
> Color background = Color.black;
> Color foreground = Color.white;
> bool antiAlias = true;
> }
>
> void generateOutput(OutputArgs args) { ... }
>
> void main() {
> // Setup function arguments.
> // N.B.: only .filename needs to be explicitly set.
> OutputArgs args;
> args.filename = "/tmp/output.png";
>
> // Call function with mostly default arguments.
> generateOutput(args);
> }
>
> This approach means that if you ever need to add more
> parameters to OutputArgs, as long as the default value is
> compatible with previous behaviour, you won't have to change
> existing code. Also, the caller can set the arguments in any
> order without needing to memorize which parameter is in which
> position.
> ...
good alternative, I already forgot about the power of structs
after Java.
More information about the Digitalmars-d
mailing list