Default argument values

Walter Bright newshound1 at digitalmars.com
Thu May 20 17:12:53 PDT 2010


bearophile wrote:
> D too copies the default value at the calling point. Looking at this from the
> eyes of a Python programmer this looks like a dirty hack.

I don't see how it could be called a dirty hack.

> This can be a cause of problems in D dlls too, I am not sure.

If you're designing a D dll, you have to decide what the interface actually is. 
Anything that appears in your .di interface file is part of the interface, and 
if you change that interface, you have to recompile all code that relies on it.

A default argument value is part of the interface.

Don't use default argument values if you don't want them to be part of the 
interface. They are trivially avoided:

     int foo(int i, int j = 7);

becomes:

     int foo(int i);
     int foo(int i, int j);

and in your implementation:

     int foo(int i) { return foo(i, y); }

Again, *anything* about the interface you expose will force recompilation of 
everything that uses that interface, if the interface changes in any way. D 
provides all the features necessary to support common and well understood 
techniques for implementation hiding and abstraction.


More information about the Digitalmars-d mailing list