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
i = 1
j = 0
i = 2
j = 0
i = 3
j = 0
i = 4
j = 0
i = 5
j = 0
i = 6
j = 0
i = 7
j = 0
i = 8
j = 0
i = 9
j = 0
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:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
Email This Post
6 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.
Seu compilador deve estar com algum problema, testei aqui e a saída foi essa:
i = 0
j = 0
i = 1
j = 0
i = 2
j = 0
i = 3
j = 0
i = 4
j = 0
i = 5
j = 0
i = 6
j = 0
i = 7
j = 0
i = 8
j = 0
i = 9
j = 0
@dRSCH
foi erro de cópia e cola. Já corrigi.
Obrigado!
Galera,
estou estudando uma apostila e a mesma pede que pesquise sobre esse labeled loops, porem ainda não consegui entender.
Alguém pode ajudar?
vlw
Leave a reply