31 Mar
Quem disse que java é bonito? C pelo menos tem a coragem de assumir que tem goto. Java disfarça na estrutura que chamamaram de Labelled Loops.
Brincadeiras a parte, embora o goto seja uma palavra reservada do Java, ele não está implementado. Como a única razão para se manter o goto em uma linguagem é você poder quebrar vários laços de uma vez (o que costuma indicar que seu código não deve estar muito bom), Java simplesmente permite que você de nomes aos seus laços e passe, como parâmetro para break e continue o label do seu loop.
public class Teste {
public static void main(String []args){
externo:for (int i = 0; i < 10; i++){
System.out.println("i = " + i);
interno:for (int j = 0; j < 20; j++){
System.out.println("j = " + j);
if (j < 4 && (j & 1) == 0)
break interno;
if ((i * j) / 5 > 0)
break externo;
}
}
}
}
Quando você rodar esse código feio e nojento, a saída será:
i = 0
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
j = 6
i = 1
j = 0
j = 1
j = 2
j = 3
j = 4
j = 5
Fiz o código bem feio pra deixar bem claro que embora exista, isso não deve ser usado nos seus códigos. Um simples break já pode causar confusão. Imaginem um monte de break e continue com uma palavra na frente. Você praticamente está condenando seu projeto ao fracasso (por que dois dias mais tarde você não conseguirá entender o que está escrito).
Posts Relacionados:
Assine nosso RSS feed!
3 Responses for "INC - Labelled Loops"
Pior é que labeled loops é só o começo… vc pode dar label pra qualquer statement e sair dando break a qualquer hora! ;-)
Nao serve pra muita coisa (sera?) mas é feio:
go_to: {
goTo: {
System.out.println("oi");
if (true)
break go_to;
else
break goTo;
}
}
Ou ainda
go_to: break go_to;:-D
Ainda mais bizzarro é que exceptions também podem ser usadas como um goto!
Uma versão ainda pior do goto ;). A troca de estado da VM vai deixar lento, além de ilegível.
Leave a reply