do expression

Tagir Valeev amaembo at gmail.com
Tue Mar 24 02:23:10 UTC 2020


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200324/bf64d1ea/attachment.htm>


More information about the amber-spec-experts mailing list