Overloading property vs. non-property

Steven Schveighoffer schveiguy at yahoo.com
Thu Jul 15 07:06:40 PDT 2010


On Thu, 15 Jul 2010 09:16:47 -0400, dsimcha <dsimcha at yahoo.com> wrote:

> Once property syntax is fully enforced (not necessarily recommended)  
> will it
> be possible to overload properties against non-properties?  My use case  
> is
> that I'm thinking about API improvements for my dflplot lib and one  
> thing that
> I would really like is to give a fluent interface to everything to  
> further cut
> back on the amount of boilerplate needed to generate simple plots.  For  
> example:
>
> Histogram(someData, 10)
>     .barColor(getColor(255, 0, 0))
>     .histType(HistType.Probability)
>     .toFigure.title("A Histogram")
>     .xLabel("Stuff").showAsMain();
>
> The problem is that I also want things like barColor and title to be  
> settable
> via normal property syntax, using the equals sign.  Right now, this "just
> works" because D's current non-analness about enforcing @property-ness is
> awesome 99% of the time even if it leads to a few weird corner cases.   
> Will
> there be a way to express such an interface to be provided (calling a  
> setter
> as either a member function or a property at the user's choice) once  
> @property
> is fully implemented?

I would say no.  A property is not meant to be a function or vice versa.   
Also, a property setter should either return void or the type it's setting.

I would suggest the following model:

@property int x(int i);
typeof(this) setX(int i);

This looks good IMO when used:

int m = c.x = 5;
c.setX(5).setY(6);

I used this in tango.sys.Process to set various parameters for process  
creation.

-Steve


More information about the Digitalmars-d mailing list