Por que o Java permite quebras rotuladas em declarações arbitrárias?
Acabei de saber hoje que o seguinte código Java é perfeitamente legal:
myBlock: {
/* ... code ... */
if (doneExecutingThisBlock())
break myBlock;
/* ... more code ... */
}
Observe quemyBlock
não é um loop - é apenas um bloco de código que delimitei com chaves.
Parece uma característica bastante estranha. Isso significa que você pode usar um nomebreak
sair de umif
declaração ou bloco anônimo, embora você normalmente não possa usar umbreak
declaração nesses contextos.
Minha pergunta é esta:existe uma boa razão para essa decisão de design? Ou seja, por que fazê-lo para que você possa interromper apenas determinadas instruções anexas usando rotuladobreak
s mas não regularbreak
s? E por que permitir esse comportamento? Dado o quão (comparativamente) o Java bem projetado é uma linguagem, eu diria que há uma razão para isso, mas honestamente não consigo pensar em uma.