Named arguments
Jacob Carlborg
doob at me.com
Thu Oct 26 06:50:50 UTC 2017
On 2017-10-24 22:36, 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);
> }
For this, it would be nice if static initialization [1] work without
temporary variables. Then it would be pretty close to named parameters.
[1] https://dlang.org/spec/struct.html#static_struct_init
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list