Proposal request: explicit propreties
Ary Borenszweig
ary at esperanto.org.ar
Tue Apr 1 06:21:19 PDT 2008
Currently properties can have these forms:
Getter:
-------
Type property() {
// ...
}
Setter:
-------
void property(Type type) {
// ...
}
The problem is, the user can use them as functions or as properties.
This is ok from the compiler point of view, but the code looks ugly if
it doesn't make sense, like:
writefln = 5;
Further, if you want a function to be only used with property syntax,
you can't. Why would you wan't that? Because if you have
class Foo {
int property() {
//
}
}
and then you decide to change it to
class Foo {
int property;
}
for some reason, code that used Foo.property() won't compile anymore.
I suggest marking properties as such like this:
getter Type property() {
// ...
}
setter void property() {
// ...
}
"getter" and "setter" are attributes, just like "public", "static", etc.
The compiler only uses them to validate correct syntax usage. If they
are applied to any other declaration that is not a function, an error is
reported.
Finally, there is another reason for wanting to mark functions as
properties: when you do autocompletion in an IDE, and it suggests you a
function, it can't know whether to autocomplete it as a function or as a
property. A solution could be writing something in the ddoc of that
function, but since there's no standard for this, each IDE will invent
it's own.
Of course, this is not backwards compatible, so it should be a D2 feature.
What do you think?
More information about the Digitalmars-d
mailing list