Having lost (nearly) this argument years ago, I'm not sure why I bother, but ...
On 5/12/19 3:38 PM, Brian Goetz wrote: > > Looking at what other languages have done here, there are a few broad > directions: > > - A statement like “break-with v”, indicating that the enclosing > structured expression is completing normally with the provided value. > - An operator that serves the same purpose, such as “-> e”. > - Assigning to some magic variable (this is how Pascal indicates the > return value of a function). > - Treating the last expression in the block as the result. (The last one being "progn", the earliest and arguably still best of these.) > > I think we can dispatch all but the first relatively easily: ... > > > - Everywhere else in the language (such as method bodies), you are > free to yield up a value from the middle of the block, perhaps from > within a control construct like a loop; restricting the RHS of case > blocks to put their result last would be a significant new > restriction, and would limit the ability to refactor to/from methods. > And further, the convention of putting the result last, while a fine > one for a language that is “expressions all the way down”, would > likely be too subtle a cue in Java. Last time around, the last point about subtlety and odd-lookingness of progn seemed to bother people the most. It is possible to make it less subtle by additionally requiring some symbol. Prefix "^" is still available. Allowing for example: String s = (foo != null) ? s : { println(“null again at line” + __LINE__); ^ “null”; }; Which still lgtm.... -Doug