<div dir="ltr"><div>I haven't been part of all the discussions that have led to this point, and also am not a Language Person, so I apologize for the things I'm missing in the following.</div><div><br></div>The more I have thought about it, the more I believe that 95% of the entire value of expression switch is that it <i>isn't procedural switch</i>, and is easier to reason about than procedural switch because of all things it <i>can't </i>do: <div><ul><li>can't miss cases</li><li>can't return</li><li>can't break/continue a containing construct</li><li>can't fall through</li><li>(for constants or other disjoint patterns) can't depend on the order of cases.</li></ul><div>As far as I can tell, its limitations are exactly what make it useful. (It isn't really a large savings of code bulk, and it's not that we really want to see switches appearing in expression contexts in general besides the key ones `var = ??` and `return ??`.)<br></div><div><br></div><div>I also believe that all these limitations work to support the notion that an expression switch is <i>functional</i> in nature. It is a function defined "in parts" (and immediately executed). As such, I believe we should discourage using expression switch in side-effecting ways. More to the point, I suggest that side-effecting use cases should not be seen as especially motivating for our design decisions (see e.g. my message 30 minutes ago in "break seen as a C archaism").<br></div><div><br></div><div>If we can manage to get in sync on the above (?), then I'd like to further argue that we should <i>leave procedural switch alone</i> (with the <i>possible</i> exception of enabling `case A, B` because that seems so very harmless, but <i>meh</i>). I believe anything we do try to to smooth out differences between procedural and expression switch and make them "really just the same thing" directly works <i>against</i> the value proposition above. It can't be a simpler thing if it is the same thing. And, of course, procedural switch has been around and unchanged (except for new types) since the very beginning.</div><div><br></div><div>If we ever manage to agree on this much (?), then we can ask ourselves if we should still use `switch` and `case` in expression switch or go with a separate syntax.</div><div><br></div><div>Again, sorry if I'm retreading ground that is already considered well trod.</div><div><br></div><div><div><div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div style="line-height:1.5em;padding-top:10px;margin-top:10px;color:rgb(85,85,85);font-family:sans-serif"><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(213,15,37);padding-top:2px;margin-top:2px">Kevin Bourrillion |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(51,105,232);padding-top:2px;margin-top:2px"> Java Librarian |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(0,153,57);padding-top:2px;margin-top:2px"> Google, Inc. |</span><span style="border-width:2px 0px 0px;border-style:solid;border-color:rgb(238,178,17);padding-top:2px;margin-top:2px"> <a href="mailto:kevinb@google.com" target="_blank">kevinb@google.com</a></span></div></div></div></div></div></div></div>
</div></div></div></div></div>