On 4/22/2011 8:43 AM, Steve Schveighoffer wrote:
There are a couple problems with this.
First, there is the WTF factor when you want to set multiple colors with the
same value:
hist1.barColor = hist2.barColor = getColor(255, 0, 0);
WTF? this is an error? But this works (enjoy the clarity of this):
hist1.barColor = (hist2.barColor = getColor(255.0, 0)).barColor;
Yeah, it would be nice if the first one worked, but in a plotting
library the second is more useful in practice. When it comes to minor
details like this, IMHO convenience is more important than consistency.
Maybe if strict semantics are implemented, this could be solved by
allowing property to be overloaded against non-property and defining a
fluent mixin to define both in a single line of code. Defining both
manually is anti-DRY and not even worth considering. IMHO they should
have the same name because it's less crap to remember.
// CTFE function that returns both property and fluent getters and setters,
// using the convention that the target variable is named _varName.
// Unfortunately this also requires overloading templates and non-templates,
// which needs to be fixed.
string fluent(string varName, string docString) {
return "/**" ~ docString ~ "*/\nauto " ~ varName ~ "() @property {
return _" ~ varName ~ ";}\n" ~
"auto " ~ varName ~ "() { return _" ~ varName ~ ";}\n" ~
"typeof(this) " ~ varName ~ "(this This)(typeof(_" ~
varName ~ ") newVal) { \n " ~
" _" ~ varName ~ " = newVal; return cast(This)
this; }\n"
"auto " ~ varName ~ "(typeof(_" ~ varName ~ ") newVal)
{ _" ~ varName ~ " = newVal; return newVal; }"
}
Second, it looks strange to have a function named barColor. In an extreme
interpretation, I could expect that with barColor, I am barring that color from
the object ;) Not that it would be a common interpretation, but the name looks
more ambiguous than say, setBarColor. There are certainly better cases that
could demonstrate my point, as English is full of words that are both nouns or
adjectives and also verbs.
In the context of a plotting library barColor makes perfect sense. Lots
of function names don't make sense when taken out of context, and
requiring them to is a Draconian measure that would force all function
names to be ridiculously long, like setHistogramBarColor().
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos