Lovely little discussion which would be great for beginning OO programmers to see. The question of whether to return 0 for an empty collection is interesting. While other things can be summed, we tend to think of sums returning numbers. In that sense, 0 is a great default return. On the other hand, having a specific object for a generic sum function is problematic (+1). There is a real tension and that would be a great discussion for people to have. Either way, the need for sumIfEmpty: is obvious. Cheers, Jeff On Tue, Dec 1, 2015 at 11:19 AM Ben Coman <btc@openinworld.com> wrote:
On Tue, Dec 1, 2015 at 10:24 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Doru,
On 01 Dec 2015, at 15:11, Tudor Girba <tudor@tudorgirba.com> wrote:
Hi,
On Dec 1, 2015, at 12:52 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
On 01 Dec 2015, at 12:45, Stephan Eggermont <stephan@stack.nl> wrote:
On 01-12-15 11:46, Sven Van Caekenberghe wrote:
The basic question for me is, what should
#() sum
return. Right now, it is an error, I would very much like that for this common case the result would be 0. There is a lot of power (easy of use) in a unary selector, we should not destroy that with semantics that force a test before using it.
I like the error, it aligns with most of our collection protocol.
I hate the error, a lot ;-)
It shows the need for #sum:ifEmpty: though
Yes, as long as #() sum == 0
That wonât work :).
Why ? Please explain.
I want the simplest case to be simple, having a non-0 default is a special case IMHO
That is why you have sumNumbers:. We could also add Collection>>sumNumbers.
We had this discussion at length before Pharo 4, and this is when we agreed to add sumNumbers: and let sum: be generic (like the name says it should be) and not assume that it should work with Numbers.
It is not about numbers or not, you are still using #+ in your generic case, that is numeric in my book. It is about the zero element and how to deal with an empty collection.
The current solution, which was indeed recently added, leaves the problem of what to do with an empty collection. There is no general solution, you have to specify a zero element.
But for most people in most cases that will be effectively 0, so lets make the unary #sum respect that. (And unary #sum will also work for non-empty non-zero based objects). The less common case can then use the longer message.