Okay, Maurizio, you got me thinking. As long as we are convinced that we are actually going to use an explicit value-returning statement within a switch expression quite infrequently in real code, why don’t we get the best of both worlds by spelling it this way:
break return x; Then everybody is happy: (1) Cannot be confused with the old `break` syntax. (2) Clearly exits a `switch` like `break` does. (3) Clearly returns a value like `return` does. (4) Better encourages exclusive use of `->` (because using `->` rather than `: break return` saves even more characters than using `->` rather than `: break`). (5) In the year 2364, this can be further generalized to allow `continue return x;`. (6) Those who want new language features to really jump out will surely be satisfied. —Guy > On Mar 15, 2018, at 5:13 PM, Maurizio Cimadamore > <maurizio.cimadam...@oracle.com> wrote: > > So, from a language design perspective, 'return x' is wrong - but, as you > point out, we already committed the original sin of having 'return == local > return' for lambdas, so I'm not too convinced that we couldn't use the same > story again here. E.g. when you say 'return', what you really mean is > 'returning from the innermost context'. This could be a method (as usual), or > a nested expression e.g. a lambda or a switch expression. > > Kevin has a point in that using return is mildly worrisome when it comes to > refactoring; but we had exactly the same problem with lambdas when we were > considering migrating code using internal iteration (for loop) to code using > external iteration (Stream forEach) - again, there the refactoring could not > be 100% smooth - if the body of your loop had some abnormally completing > branches, then there was no way to translate that into an external iteration > idiom - at least not mechanically (e.g. 'return x' already meant something > different inside old-style for loop bodies). > > So, seems to me that we end up with the same bag of pros and cons? E.g. more > familiar to the user (return <expr> is something that they know and love), > but more smelly from a design point of view (in a way that forecloses using > 'return' to mean non-local return, but I wonder - has that ship already > sailed?) > > Maurizio