Laço [Resolvido]

Boa noite,

Vi um laço usando em um exemplo:

LOOPEXTERINO : while(true){
LOOPINTERINO :  for(int i=1;i<=10;){
    //aqui vem alguns comandos e tal...
    break LOOPEXTERINO; //GOSTARIA QUE ESTE BREAK QUEBRASSE A ESTRUTURA DO WHILE E NÃO DO FOR
  }
  //aqui vem alguns comandos e tal...
}

fonte: http://www.guj.com.br/posts/list/226670.java

Minha duvida é se esse procedimento em uma prova de certificação java é aceito?

Motivo: Essa implementação me lembrou do velho: GOTO, muito criticado por alguns profissionais da area.

[]s

Nomear loops, eu aprendi no conteudo da certificação, e é cobrado na prova se não me falha a memória tive uma questão na prova que tinha loops nomeados

eu não concordo que é goto porque, nomear os loops só pode ser usado para controlar loops nada mais

Boa noite,

Entendi, obrigado :slight_smile: Tem algum material online ou em arquivo que possa expor o que sempre cai na prova de certificação? Vou aproveitar o tempo pra ir estudando.

[]s

Boa noite,

A resposta estava embaixo do meu nariz por assim dizer: http://www.guj.com.br/posts/list/7458.java

Obrigado.

[]s

Lembra GOTO mesmo, ainda mais se considerarmos o alto teor de gambiarras que a técnica de Labaled Loops carregam consigo huahuahuauhahu.
Tipo, evite ao máximo extremo usar break e continue no seu código, é exatamente igual a GOTO MESMO!
Torna o código ilegível e dar manutenção nessa bagaça é uma droga.

Resumindo: se você não quer ter sua mãe xingada diversas vezes durante anos… evite! hahhaaha

Eu já sou um defensor dos “labeled loops” (quando usados com critério, é lógico).
Eles evitam o único uso “legítimo” do “goto” em C# e C++, que é exatamente esse.
A única coisa que não gostei nos labeled loops é que eles não são muito intuitivos no caso do “break”.

Se eu não houvesse lido a especificação da linguagem, pensaria que um break, para sair de 2 níveis de loops, seria assim:

for (....) {
    for (....) {
        if (.....) 
            break caifora;
    }
}
caifora:

porque você vê explicitamente que o break vai para esse lugar chamado “caifora”.

Mas em Java, para você sair de 2 níveis de loops, você precisa fazer assim:

caifora:
for (....) {
    for (....) {
        if (.....) 
            break caifora;
    }
}

Isso, obviamente, não é nem um pouco intuitivo.
Funciona bem para o “continue” (que é uma espécie de “goto para trás”) mas não para o “break” (que é um “goto para frente”).
Na verdade, quando preciso fazer isso, normalmente indico, em um comentário, que o “break caifora” cai fora do for mais externo, apenas para evitar que alguém que esteja mantendo meu programa e não conheça essas sutilezas da linguagem acabe estragando tudo.