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 <[email protected]> wrote:

> On Tue, Dec 1, 2015 at 10:24 PM, Sven Van Caekenberghe <[email protected]>
> wrote:
> > Doru,
> >
> >> On 01 Dec 2015, at 15:11, Tudor Girba <[email protected]> wrote:
> >>
> >> Hi,
> >>
> >>> On Dec 1, 2015, at 12:52 PM, Sven Van Caekenberghe <[email protected]>
> wrote:
> >>>
> >>>
> >>>> On 01 Dec 2015, at 12:45, Stephan Eggermont <[email protected]> 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.
>
> https://en.wikipedia.org/wiki/Empty_sum
>
>

Reply via email to