do expression
Remi Forax
forax at univ-mlv.fr
Tue Mar 24 17:43:36 UTC 2020
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 |
> 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/47a4b877/attachment.htm>
More information about the amber-spec-experts
mailing list