It looks weird to me. An arrow assumes some left-hand 'from' part, but it's absent here. Also, too easy to mix with actual lambda, to my taste. Still, better than nothing :-)
Tagir. On Wed, Mar 25, 2020 at 7:18 AM Remi Forax <fo...@univ-mlv.fr> wrote: > > Hi Tagir, > There already a syntax for that in Java, > we are using it for lambda and switch, the arrow block syntax. > > static final String FIELD = -> { > try { > yield initializeField(); > } > catch(CheckedException e) { > throw new RuntimeException(e); > } > }; > > Rémi > > ________________________________ > > De: "Tagir Valeev" <amae...@gmail.com> > À: "amber-spec-experts" <amber-spec-experts@openjdk.java.net> > Envoyé: Mardi 24 Mars 2020 03:23:10 > Objet: do expression > > Hello! > > Now we have a legal way to execute several statements within an expression, > yielding the result with a yield statement. This could be done via `switch` > expression. > > Sometimes it's desired to do this without any switch. One may abuse the > switch expression feature writing `switch(0) { default -> { ... code block > ending with 'yield' }}`. > > How about creating a special syntax for such kind of expression. It could > look like `do { ... code block ending with 'yield' }`? > > E.g. consider: > > class X { > static final String field; > > // now we are forced to split field declaration and initialization > // also initializer could be long and it could be not evident that its main > purpose > // is to initialize the field > static { > try { > field = initializeField(); > } > catch(CheckedException e) { > throw new RuntimeException(e); > } > } > } > > Since Java 14 we can write > > class X { > // field declaration and initialization in the same place: easier to > navigate through code > // though we are abusing the switch expression > static final String field = switch(0) { default -> { > try { > yield initializeField(); > } > catch(CheckedException e) { > throw new RuntimeException(e); > } > }}; > } > > It could be like > > class X { > // concise syntax. Now we know that the main block purpose > // is to initialize the field > static final String field = do { > try { > yield initializeField(); > } > catch(CheckedException e) { > throw new RuntimeException(e); > } > }; > } > > It's similar to Perl 'do BLOCK' expression > https://perldoc.perl.org/functions/do.html > > What do you think? > > With best regards, > Tagir Valeev >