At 7:20 PM -0800 1/24/08, Jonathan Lang wrote:
Instead, I'll say that the idea that Order::Increase numifies to -1 is going to take some getting used to. While I understand the reasoning behind it, my intuition would have been to numify it to +1 for an increase and -1 for a decrease.
I don't see this as being a problem since I expect very few users deal directly with the numbers anyway, and they're just a background implementation and/or legacy detail.
The main place I would understand the actual numbers having any semantic effect is if you want to chain comparators such as "$^a.foo <=> $^b.foo or $^a.bar <=> $^b.bar" (I may have spelled wrong), sort first by .foo then by .bar; that's counting on the result boolifying to false when the 2 comparands are equal, and boolifying to true when not; this isn't different in your suggestion vs otherwise.
So I recommend not changing this.
If C<"abc" cmp "xyz"> must numify to -1, could we please choose something like 'Order::Before' and 'Order::After' instead of 'Order::Increase' and 'Order::Decrease'? Not only does this make more intuitive sense, but it also pairs the Order values more closely with the type-neutral comparison operators ('before' and 'after').
By contrast, at least looking at Order on its own, I think Increase|Decrease works better than Before|After. Part of the reason is that the first 2 work well for both prefix and infix notations, while the second 2 just work for infix. Take for example "there is an increase from foo to bar" or "foo increases to become bar", versus "foo is before bar". At least this aspect is a preference of mine, as I prefer standardizing on prefix notation for all routine/operator calls where possible. Still, I suppose I may not complain too loudly if the change you suggest was made.
I'd be more interested in hearing what precedents if any exist in this regard. What do other languages call the same concepts?
-- Darren Duncan