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

Reply via email to