Properties
Nick Sabalausky
a at a.a
Sat Jan 10 08:35:53 PST 2009
"Daniel Keep" <daniel.keep.lists at gmail.com> wrote in message
news:gk9v33$1bvu$1 at digitalmars.com...
>
>
> Jérôme M. Berger wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Daniel Keep wrote:
>>>
>>> Michiel Helvensteijn wrote:
>>>> [Condensed: syntax sucks, let's introduce more!]
>>> I might be old fashioned (get offa mah lawn!), but I've always found
>>> something like the following quite acceptable:
>>>
>>> class Foo
>>> {
>>> mixin(properties
>>> ("
>>> rw int bar;
>>> ro float baz;
>>> wo Foo zyzzy;
>>> "));
>>> }
>>>
>> Note that this is a very limited use for properties. Defining
>> properties isn't just a question of access control (read/write, read
>> only, or write only).
>
> For me, it *was* a case of access-control... at least, it was about 80% of
> the time.
>
> I'm a fan of interface-heavy design: make an interface for every distinct
> kind of functionality and pack them all together. That means I end up
> with a metric buttload (equivalent to about 42 imperial piles) of
> properties.
>
> And most of them were just accessors that needed to be in the interface;
> hence the functionality of the mixin.
>
> > It is also a way to execute arbitrary code
>> each time the value is changed (or accessed), ...
>
> It's been a while since I used the code, and honestly I can't seem to
> track it down, but I recall that I could do this:
>
> mixin(properties(" rw int bar; "));
>
> protected void bar_onSet(int newValue) { ... }
>
> There was also an *_onGet, and you could block setting a property by
> throwing an exception, I believe.
>
> Granted, this doesn't cover every possible use-case, but then it's not
> supposed to; it's supposed to make the 90% easier. It still did the
> assignment, since I felt you shouldn't be making properties that have a
> setter that doesn't set anything...
>
> > ... or to create
>> properties that don't correspond to actual data fields (complex
>> module and argument come to mind).
>
> If the property doesn't correspond to a physical field, then you're going
> to have to write the code to handle it from scratch. And no matter WHAT
> you do, it's eventually going to boil down to one or more functions.
> Which is EXACTLY how they currently work.
>
> What would be the point of making a special syntax when you can already do
> that? :P
>
Same reason we have "while" and "foreach" in addition to "for".
> > How would you do that with
>> mixins? (Not that it would be impossible, but the syntax would
>> probably be horrible).
>>
>> Jerome
>
> On a somewhat related note, I've often pondered writing a very limited D
> parser in CTFE to do this sort of thing more easily, but never got around
> to it, nevermind the CTFE memory bugs...
>
> -- Daniel
More information about the Digitalmars-d
mailing list