Hi,

as I already posted in the parallel thread, there is that strawman called "do expression" by dherman that does just that.

I feel like crying when I see how powerful data constructs could be if not hampered by "possible to parse as code block" ambiguity.

Herby

-----Pôvodná správa----- From: François REMY
Sent: Wednesday, January 04, 2012 10:50 PM
To: [email protected] ; es-discuss
Subject: Re: Boolean shortcuts


“You already have to.” –> If something is bad, don't change it?

(1) Block expressions are not useful because you can't use them as expressions (=retreive their value) if you don't use “string eval”. (2) Object syntax is restricted because lookahead comes at a cost for parsers.

This is a mess. Beginners hate it. Parsers don't like it. And yet it's still there...

Personnaly, I would like to do something like that (and I remind an earlier proposal from the mailing list) :

   // try to create an "x" variable
   let x = try { doSomething() } catch (ex) {};

or

   // log the value of 1+2+3+...+10
   console.log (eval { let i=10, j=0; while(i) { j+=i—; } });

Now, I have to do something like that :

   // not as readable
   let x; try { x=doSomething() } catch (ex) {}

or

   // bad but close in term of input
   console.log(eval("let i=10, j=0; while(i) { j+=i--; }"));

   // as optimized, but not as readable
   { let i=10; let j=0; while(i) { j+=i--; }; console.log(j); };

The introduction of the “eval” keyword before a block has tons of other advantages :

{}.toString(); // will now compile and return “[object Object]” from anywhere in the code

That means I can do something like :

   let props = eval {
       let obj   = func();
       let prop1 = getProp1(obj);
       let prop2 = getProp2(obj, prop1);
       {
           prop1: prop1,
           prop2: prop2
       }
   }

Another proposed syntax, namely

   this.function() {} <—> (function() {}).bind(this)

will now be acceptable since

   function() {
       return this.function(); //ASI
       {
           doSomething();
       }
    }

is not allowed in ES6, there’s no syntax conflict. So, we can introduce the [noLineBreak] token after “function” safely.

BTW, I also think we should drop labels for ES6. This will help to simplify syntax, too. With ES6, we should build a new syntax that’s more logical to use.

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

Reply via email to