do expression
Tagir Valeev
amaembo at gmail.com
Wed Mar 25 03:19:24 UTC 2020
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 <forax at 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" <amaembo at gmail.com>
> À: "amber-spec-experts" <amber-spec-experts at 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
>
More information about the amber-spec-experts
mailing list