<div dir="ltr">Addendum: all non-function/class statement blocks seem to act like this,<br><br>```<br><div>for (x of ['val']) { x; }</div><div>// "val"<br><br><div>for (x in ['val']) { x; }</div><div>// "0"</div><div><br></div><div><div>let x = 1</div><div>// undefined</div><div>while (x) {</div><div>    x-= 1;</div><div>    x;</div><div>}</div><div>// 0</div></div><br><div>switch(1) {</div><div>    case 0: 2;</div><div>    case 1: 6;</div><div>}</div><div>// 6</div>```<br><br>This raises the general question: why not let *all* statement blocks be used as expressions?</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 18 Jan 2018 at 12:21 Michael Rosefield <<a href="mailto:rosyatrandom@gmail.com">rosyatrandom@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Just to stick my uninformed oar into this, I notice what `do-while` statements *already* return a value in the exact way as the proposal.<br><br><div>```</div><div>do { </div><div><span style="white-space:pre-wrap">       </span>if(true) 1;</div><div><span style="white-space:pre-wrap">      </span>else 2;</div><div> } while(false)</div><div>// 1</div><div>do { </div><div><span style="white-space:pre-wrap">   </span>if(!true) 1;</div><div><span style="white-space:pre-wrap">     </span>else 2;</div><div> } while(false)</div><div>// 2</div><div>```<br><br>Of course, since this is a statement rather than an expression, there's little you can do with that.</div><div><br></div><div>So I have 2 questions:</div><div>1. Would changing `do-while` from a statement to an expression cause any issues?</div><div>2. Would having the while clause optional (and leaving it out being equivalent to `while(false)`) cause any issues?</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 18 Jan 2018 at 12:01 Naveen Chawla <<a href="mailto:naveen.chwl@gmail.com" target="_blank">naveen.chwl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I agree it's a misuse, my point is simply why introduce the possibility? Key question for me (for any feature): show how it can reduce the chances of bugs.<div><br></div><div>Arrow functions succeed, for example: by removing nested "this" context, thereby simplifying moving of code around etc.</div><div>Async await succeeds, for example: by linearizing and hence considerably simplifying the building and reading of asynchronous data flows in code.</div><div>Classes succeed, for example: by removing the fiddly overhead in establishing (especially multi-level) inheritance using prototypes.</div><div><br></div><div>The examples on the proposal page don't succeed, for me, in establishing how (if at all) using a do-expression could (vs the most elegant alternative currently).</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 18 Jan 2018 at 17:16 T.J. Crowder <<a href="mailto:tj.crowder@farsightsoftware.com" target="_blank">tj.crowder@farsightsoftware.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>On Thu, Jan 18, 2018 at 11:39 AM, Naveen Chawla <<a href="mailto:naveen.chwl@gmail.com" target="_blank">naveen.chwl@gmail.com</a>> wrote:</div><div>> ...but can you imagine a heavily nested conditional algorithm</div></div><div dir="ltr"><div>> where it's not immediately clear you're inside a "do" expression?</div><div><br></div></div><div dir="ltr"><div>I can. I would call it a misuse of the `do` operator, just like it is when you do that with conditionals or nested callbacks or switches or arrow functions or (etc.), or some combination of same. :-)</div></div><div dir="ltr"><div><br></div><div>-- T.J. Crowder</div><div><br></div></div></blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div></blockquote></div>