Linux, Open-source, Programação e Produtividade

INC - Labelled Loops

Jonas Abreu em 31/03/2008

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).

Creative Commons License
INC - Labelled Loops de Jonas Abreu está licenciado sob Creative Commons License.