> De: "Brian Goetz" <brian.go...@oracle.com>
> À: "Kevin Bourrillion" <kev...@google.com>, "Guy Steele" 
> <guy.ste...@oracle.com>
> Cc: "amber-spec-experts" <amber-spec-experts@openjdk.java.net>
> Envoyé: Jeudi 10 Mai 2018 22:04:15
> Objet: Re: Treatment of nested 'break'

> This might not help, but perhaps think of it as a compound keyword; "break
> switch" is not "break with an argument of switch", but a multi-word keyword
> itself.

> (Back in lambda, when we explored the consequence of using "return" in lambda,
> and observed it foreclosed on nonlocal return should we ever want to get 
> there,
> we briefly discussed "long return" as a compound keyword for that case. Same
> game.)

> Personally if I saw "break while", I think I'd immediately know what that 
> means,
> and might even thank the author for being clear.
You can also use any other word instead of break or break switch. 
By example, 
breakswitch 3; 

Rémi 

> On 5/10/2018 3:57 PM, Kevin Bourrillion wrote:

>> I'm just going to say that naming a keyword as the argument of another 
>> keyword
>> seems novel and unprecedented for Java, and as such I think should require
>> pretty strong justification.

>> On Thu, May 10, 2018 at 12:12 PM, Guy Steele < [ 
>> mailto:guy.ste...@oracle.com |
>> guy.ste...@oracle.com ] > wrote:

>>>> On May 10, 2018, at 3:06 PM, Brian Goetz < [ mailto:brian.go...@oracle.com 
>>>> |
>>> > brian.go...@oracle.com ] > wrote:


>>>>> I think these are both valid explanations, with different outcomes, but 
>>>>> anyway
>>>>> it's fair to say that it would be confusing to have the latter 
>>>>> perspective and
>>> >> then try to explain how a value break can get past a surrounding 'for' 
>>> >> loop.

>>>> One option is: you can't. While I agree there is code that one might like 
>>>> to
>>>> write that is made cumbersome by this, it's a valid option, and not one 
>>>> that is
>>> > utterly terrible.

>>>> Another option is to extend the break syntax along the lines of the 
>>>> proposed
>>>> continue syntax. Suppose for every continuable construct x (for, while, 
>>>> switch)
>>>> we supported "continue x". So for every breakable construct y we could 
>>>> support
>>>> "break y". If a for loop were enclosed in an expression switch, you could 
>>>> then
>>> > say "break switch e". Then

>>> > if (foo)
>>> > break;
>>> > else
>>> > break 3;

>>> > becomes

>>> > if (foo)
>>> > break for;
>>> > else
>>> > break switch 3;

>>> > and it is much more obvious what is going on.

>>> If we are willing to pile up keywords in that manner, an alternate 
>>> possibility
>>> is to spell a value-returning break in a different way:

>>> return switch <expression>;

>>> Then your example can become (I have added the implicit context):

>>> switch (…) { case 17 -> {
>>> …
>>> for (…) {
>>> ...
>>> if (foo)
>>> break;
>>> else
>>> return switch 3;
>>> … }
>>> … }
>>> … }

>>> The additional advantage of this approach is that it completely eliminates 
>>> the
>>> syntactic ambiguity between

>>> break variableName;

>>> and

>>> break labelName;

>>> Given that we think most occurrences of “return switch” (or “switch return”,
>>> take your pick) will be abbreviated by -> anyway, this might be an 
>>> acceptable
>>> approach.

>>> You can then still choose to go ahead and also allow things like

>>> break for;
>>> break switch;
>>> break while;
>>> continue for;
>>> continue switch;

>>> but that can be a separate decision; these become simply a way to avoid 
>>> using
>>> statement labels.

>>> —Guy

>> --
>> Kevin Bourrillion | Java Librarian | Google, Inc. | [ 
>> mailto:kev...@google.com |
>> kev...@google.com ]

Reply via email to