Dave, if nesting were out of the question and monocle-mustache operator always looked like an object literal as they currently exist, would it still be as vile? With that form, I'm a big fan.
/Rick On Nov 11, 2011, at 3:13 PM, David Herman <dher...@mozilla.com> wrote: > On Nov 11, 2011, at 10:50 AM, Erik Arvidsson wrote: > >> We've all looked at jQuery code and envied the conciseness of its chaining >> APIs. Most of us also looked at it and thought; Yuk, making everything a >> method of jQuery and always return the jQuery object is ugly. > > Beauty is in the eye of the beholder... jQuery made combinator libraries > cool, and for that this functional programmer is permanently indebted to > jresig. > > But really, there's a world of difference between the chaining done by > libraries like jQuery and the chaining you get from this operator. The former > is pure, the latter is a mutation. The .{ syntax obscures this fact, and I > find that inexcusable. > > I'm not saying mutation is bad -- JS is no pure functional language, nor > should it be. But creating an assignment operator that doesn't suggest > syntactically that it's an assignment, and worse, advertising it as a > "chaining operator" as if it were the same thing as what jQuery does, makes > the same mistake of masking mutation that so many imperative programming > languages make. Languages should be up front when they use mutation and not > try to hide it or confuse programmers into not knowing when they're doing it. > > Just for contrast, here's what your example might look like with a more > explicit assignment syntax: > > document.querySelector('#my-element') .= { > style .= { > 'color': 'red', > 'padding': '5px' > }, > textContent: 'Hello' > }; > > But that nested thingy smells awfully funny to me. This reminds me of > excessive uses of "point-free style" in Haskell, where people do back-flips > just to avoid creating variable names for intermediate results. Variables > aren't evil! Sometimes it's just cleaner to use a local variable: > > let elt = document.querySelector('#my-element'); > elt.style .= { > 'color': 'red', > 'padding': '5px' > }; > elt.textContent = 'Hello'; > > Worse, notice that you have provided *only* an ability to do deep mutation > here, and no way to do a functional update (such as a copy with the specified > changes, or a prototype extension with the changes) on nested structure. My > spidey-sense was already tingling with monocle-mustache, but this nesting is > another turn for the worse. > > Dave > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss