digitalmars.D - Extendable properties/methods
- Fredrik Olsson (43/43) Jan 06 2006 A good and large thread on the topic of revisited syntax for properties....
A good and large thread on the topic of revisited syntax for properties.
How about an idea for adding methods and properties for *all* kinds of
types, not just array types.
int indexOf(char[] haystack, char needle);
Can now be used as either indexOf(my_string, 'a'), or
my_string.indexOf('a'). It works nice, and I use it frequently so no
need to break that one. But it is kind of sad that it does not work for
int as well.
bool isPrime(int this);
Jupp, what if naming the first argument this would imply that it is a
"method" not a function? Seams quite natural to me.
Could work well with a revisited properties syntax as well. Today
T name() { ... } // and
T name(T foo) { ... }
makes up a property pair. As I said in the other thread going for:
property T name() { ... } // and
property T name(T foo) { ... }
could be "compatible enought", to allow for the old way to stay but
depricated for while.
As a bonus:
property T name(U this) { ... } // and
property T name(U this, T foo) { ... }
Would naturaly add properties to existing types.
Well, that is all fine for unindexed properties anyway. Having used both
Object Pascal and Visual Basic, I like their simple way of doing fake
array properties with little extra code. As per VB:
Property Get Foo(index As Integer) As String
...
End Property
Is quite elegant and works well, both for writing and using the
implementation (From the view of writing a compiler handling it, I have
no clue). How to make it most elegant in D, I am not so sure, requiring
a class with overridden opIndex and opIndexAssign, feels like an
overkoll though.
property get T name(int i); // and
property set T name(T foo, int i);
Is the best I can do.
property T name(int i) {
get { ... }
set { ... }
}
pleasing to my eye, but feels far from the current way it is done.
Jan 06 2006








Fredrik Olsson <peylow gmail.com>