On Sep 21, 2012, at 4:32 PM, Jason Orendorff wrote: > I have a few proposals and questions about ES6 array comprehensions: > http://people.mozilla.org/~jorendorff/es6-draft.html#sec-11.1.4.2 > > 1. It seems simpler and more general to accept arbitrary sequences > of 'for' and 'if' clauses: > > [x if x !== undefined] > [g for u of users if u.isAdmin() for g of u.groups()] > > In the current draft only [Expr ForClause+ IfClause?] is allowed.
Allowing an arbitrary sequence of |for| and |if| clauses is arguably more complex and harder to understand than the current proposal for a sequence of |for| clauses followed by a single optional |if| clause. My personal bias, is that comprehensions are just sugar that are best used to express relatively simple and common construction use cases. Complicated sequences of |for| and |if| clauses will be rarely seen and hence less understandable than the equivalent explicit looping expansions. > > 2. These comprehensions are permitted: > [EXPR for x of obj if a, b, c] > [EXPR for x of obj if x = 3] see separate response ... > 3. SpiderMonkey already supports this nonstandard syntax: > [x for each (x in obj)] > A paren-free ES6 array comprehension could begin with a function > call, like this: > [x for each(x in obj).y of z] > Currently SpiderMonkey treats 'each' as a keyword when it > appears after the 'for' keyword. > > The two syntaxes are distinguishable in all cases, right? > It's a little painful to get NotIn right in this case, but we can > hack it. As long as the syntax is unambiguous. For-of was introduced to be a more generalizable equivalent to for-each-in. I don't think we want to go back on that design decision and it isn't clear in the above suggestion what the alternative would be to [x for x of keys(obj)] // or [x for x of obj.keys()] Is it [x for keys( x of obj)] ???? There seems to be all sort of complications for the form you suggesting. For example, must the function that is called be identified by a PrimaryExpressioin? Is only one argument allowed? Is the binding declaration of "x" always the first argument position. Is something the the |of| keyword in a parameter posEtc. I find it bad enough that the Expression that references the for clause bound identifiers is to the left of the bindings. I think burying bindings in augment positions would make things even worse. Allen
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

