<div dir="ltr"><div>On Thu, Jan 18, 2018 at 8:23 AM, Naveen Chawla <<a href="mailto:naveen.chwl@gmail.com">naveen.chwl@gmail.com</a>> wrote:</div><div>></div><div>> Also, I don't find it very readable/clear when reading it in code.</div><div>> Maybe I'm missing the whole point, but the comma operator forces</div><div>> you to wrap each non-expression language construct (e.g. for</div><div>> loops) into a function, which makes the expression itself clearer</div><div>> (in my opinion) than a do-expression.</div><div><br></div><div>I believe the point is to allow a series of statements, not just an expression as with the comma operator; and (when a block is used with them) to provide a local scope for identifiers (which again the comma operator doens't provide). Basically an arrow function without the call overhead and (tiny bit of) syntactic cruft. E.g.:</div><div><br></div><div>With the `do` operator:</div><div><br></div><div>```js</div><div>let x = do {</div><div>  let tmp = f();</div><div>  tmp * tmp + 1</div><div>};</div><div>```</div><div><br></div><div>without the `do` operator:</div><div><br></div><div>```js</div><div>let x = (() => {</div><div>  let tmp = f();</div><div>  return tmp * tmp + 1;</div><div>})();</div><div>```</div><div><br></div><div>or in that particular case:</div><div><br></div><div>```js</div><div>let x;</div><div>{</div><div>  let tmp = f();</div><div>  x = tmp * tmp + 1;</div><div>}</div><div>```</div><div><br></div><div>...but that wouldn't work if `x` were a `const` instead.</div><div><br></div><div>How would you address that with just the comma operator? You need a scope for `tmp` unless you want it bleeding into the outer scope.</div><div><br></div><div>I also have to say I find the comma operator *very* easy to misuse, leading to hard-to-read code. `do` would be clearer in those cases.</div><div><br></div><div>> Also, it's very easy to accidentally add code after the last</div><div>> statement, breaking the code and hence causing bugs!</div><div><br></div><div>Can you give an example of what you mean by that? Randomly adding code in the wrong place is going to cause bugs, yes. :-) I mean, just generally...</div><div><br></div><div>I'm on the fence about `do` expressions. Yes, they provide a handy micro environment for a short series of statements. But given standalone blocks and arrow functions (particularly inline ones that are easily optimized), is it really worth overloading `do` with another meaning and adding to the human and computer parsing overhead? And encouraging inline logic rather than breaking into smaller pieces? I'm a firm "maybe" for now. :-)</div><div><br></div><div>-- T.J. Crowder</div></div>