On Mar 21, 2009, at 10:26 AM, Edward Lee wrote:

On Sat, Mar 21, 2009 at 11:57 AM, Brendan Eich <[email protected]> wrote:
Of course, all the other "array extras" are specified with a thisArg so consistency argues that reduce and reduceRight should be specified that way
too.
I had to remind myself of Dave's analysis/argument, cited in full above, to
see why we didn't do that.
What exactly was Dave's argument for not including a thisArg? There's
a brief mention of multiple-optional-args-messiness, and then it talks
about a future where other "array extras" don't have a thisArg.

Dave wrote:

So this would mean reduce takes one callback argument and two optional arguments: thisObject and init. Which one should come first? The more common one is probably init, but then you separate the callback arg from the "thisObject" arg, which is maybe okay. Multiple optional arguments are kinda messy this way...


Indeed the other Array extras take (callback [, thisArg]) where [] means optional, but reduce and reduceRight want an optional initialValue "fold basis". Without named parameters there's a problem, since the initialValue is probably more commonly supplied than thisArg (we intuit, and I think this is true from the reduce uses I've seen, but more data welcome).

We could surely give reduce the parameters (callback [, initialValue [, thisArg]]) but as Dave noted this breaks one symmetry (a more superficial kind than the loss of thisArg? nevertheless...) with the other Array extras, by not putting the optional thisArg parameter immediately after callback.

The other way 'round makes the initialValue parameter case have to supply a dummy thisArg, according to the hypothesis that initialValue is more commonly supplied in actual use cases.

Then there's the Pythonic argument: "just like Python => Python community mindshare". Of course Python's reduce is a function, not a method, but the mapping is straightforward.

/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to