O que é labeled loops?

Boa Noite pessoal, estou começando aprender Java e estou com algumas duvidas, se alguem poder me ajudar eu agradeço!
Por favor alguem sabe o que é labeled loops?

1 curtida

[quote=Daniel Bilhalva]Boa Noite pessoal, estou começando aprender Java e estou com algumas duvidas, se alguem poder me ajudar eu agradeço!
Por favor alguem sabe o que é labeled loops?[/quote]

Já que está começando, vou te dar uma dica para não depender de frequentadores noturnos do GUJ: Google.

Quando tiver uma dúvida sobre um conceito específico sobre esse, jogue lá que raramente não achará a resposta.

Aliás, neste caso, ela está no próprio guj, nesse tópico aqui: http://www.guj.com.br/java/31389-labeled-loops

[quote=Daniel Bilhalva]Boa Noite pessoal, estou começando aprender Java e estou com algumas duvidas, se alguem poder me ajudar eu agradeço!
Por favor alguem sabe o que é labeled loops?[/quote]

O java oferece uma funcionalidade que é pouco usada, mas que algumas vezes é muito util.

Se vc tiver dois loop aninhados e chegar na conclusão que não precisa iterar mais o loop interno, como mandar continuar o loop externo


for (A a : listaDeA) {
    
    x();

    for (B b : listaB) {

           y()
   }

 z();
}

h();

No caso a ideia é sair do loop de dento sem passar por z();

Se colocar um break no for de dentro vc consegue interronper ele, mas o z() ainda será chamado.
A solução é usar labels assim


outter:for (A a : listaDeA) {
    
    x();

    inner: for (B b : listaB) {

           y()
            continue outter; 
           
   }

 z();
}

h();

Agora vc instrui a que o for chamado “outer” seja continuado. Desta forma o codigo passa direto para o proximo ‘a’ e executa x() sem executar z.
Não seria necessário por um label no for de dentro é apenas como exemplo, mas é uma boa prática para ficar mais legível.

É isso, não tem muito segredo.

Vc poderia tambem interromper todos os loops e sair passando diretamente para h() usando break com label.


outter:for (A a : listaDeA) {
    
    x();

    inner: for (B b : listaB) {

           y()
            break outter; 
           
   }

 z();
}

h();

É um recurso do Java pouco utilizado e difundido, mas que às vezes é “uma mão na roda”. Certa vez eu estava desenvolvendo um trabalho da faculdade e foi graças ao for com label que consegui implementar o algoritmo com sucesso.
Por isso é importante conhecer os recursos da linguagem para utilizá-los quando houver necessidade.

Resumindo, é o GOTO do java, ou o famoso break. Acho q nao é difundido justamente pq nao deveria nem ser usado, se o for precisa parar em determinada condição, pq nao usa um while entao?

é mt diferente do goto

Se é tão simples, por favor reescreva o código do exemplo que dei acima, sem labels e que sai do for interno sem executar o codigo a seguir ao for.
O label do java embora pareça um goto, e embora seja implementado como se fosse um goto, é muito mais elegante que um goto. Ou melhor, se pegar o goto e retirar todos os usos errados e ficar com os corretos, vc vai encontrar 4 padrões : if, switch, while e loop labels. Sem loop labels dá para fazer, usando os outros 3 - principalmente if - mas fica um codigo esparguete.

Tópico movido para o fórum de Java Básico.

Pessoal muito obrigado pela ajuda, consegui entender o que é labeled loops!
E me descupem por agradecer só agora, é que trabalho durante o dia e só tenho tempo de estudar a noite.