<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">There are three arguments why the N case is significantly different from the 2 case.  </div><div class=""><br class=""></div><div class="">There are a number of idioms that require statements in addition to an expression.  Debugging printfs, objects that take statements to initialize (construct/set/set/break), incrementing counters, cases that require side conditions (if today is tuesday do one thing, otherwise another), etc.  Each individually is rare-ish, but not all that rare.  </div><div class=""><br class=""></div><div class="">The "static applicability" argument is that the larger the number of cases, the more likely one of them will fall into one these buckets, and then the  whole thing has to fall back to statements.  This makes expression switches less useful, and falling off this cliff is likely to irritate users every time it happens.  </div><div class=""><br class=""></div><div class="">The “dynamic applicability” argument is that, if you want to change an existing switch (say, to add a debugging printf in one path), you have to refactor the whole thing.  Which will be met, by users, with “YGBFKM.”  </div><div class=""><br class=""></div><div class="">The “cliff height” argument says that falling off the cliff on a two-way conditional and having to refactor to if-else is far less painful than falling off the cliff on an N-way switch.  Its a more painful refactor.  </div><div class=""><br class=""></div><div class="">So for all these reasons, not being able to occasionally include some statements means many more switches that can’t use the feature (which is safer, clearer, and more compact), and also more often that the user will have to gratuitously refactor perfectly good code as they make small changes.</div><div class=""><br class=""></div><div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 13, 2018, at 8:59 PM, Kevin Bourrillion <<a href="mailto:kevinb@google.com" class="">kevinb@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><blockquote class="gmail_quote" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div dir="ltr" class=""><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div text="#000000" bgcolor="#FFFFFF" class=""><tt class=""> - Do nothing; only allow single expressions.  Non-starter.<br class=""></tt></div></blockquote><div class=""><br class=""></div></span><div class="">We're just saying the feature seems to be at least 90% as applicable without it. Roughly. Why is it a non-starter for the other 10% to stick with the switch they've always had? I'm sure there are good answers to that, I'm not doubting there are, but I think we should explore them instead of just declaring something a non-starter by fiat.</div></div></div></blockquote><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Also, if it is true that this is a "non-starter", I would assume it is also a non-starter to only allow single expressions in the conditional operator `?:`. If not, what is the fundamental difference?</div></div></blockquote></div><br class=""></div></div></body></html>