Sentença break e continue ECMAScript

As instruções break e continue fornecem um controle mais rigoroso sobre a execução do código dentro dos loops.

Diferenças entre break e continue

A instrução break sai imediatamente do loop, impedindo que qualquer código seja executado novamente.

A instrução continue apenas sai do loop atual, permitindo que a próxima iteração continue com base na expressão de controle.

Por exemplo:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    break;
  }
  iNum++;
}
alert(iNum); // Exibe "4"

No código acima, o loop for itera a variável i de 1 a 10. Dentro do corpo do loop, a instrução if verifica (usando o operador de módulo) se o valor de i pode ser dividido por 5. Se puder, executa a instrução break. O alert exibe "4", que é o número de vezes que o loop foi executado antes de sair.

Se substituirmos a instrução continue por uma instrução break neste exemplo, o resultado será diferente:

var iNum = 0;
for (var i=1; i<10; i++) {
  if (i % 5 == 0) {
    continue;
  }
  iNum++;
}
alert(iNum); // Exibe "8"

Aqui, o alert exibirá "8", que é o número de vezes que o loop será executado. O total de loops possíveis pode ser 9, mas quando o valor de i for 5, a instrução continue será executada, saltando a expressão iNum++ e retornando ao início do loop.

Usar em conjunto com sentenças etiquetadas

As sentenças break e continue podem ser usadas em conjunto com sentenças etiquetadas para retornar a um local específico do código.

Normalmente, quando há loops internos dentro de loops, é feito assim, por exemplo:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    break outermost;
  }
  iNum++;
  }
}
alert(iNum); // Saída "55"

No exemplo acima, a etiqueta outermost representa a primeira sentença for. Normalmente, cada sentença for executa 10 vezes o bloco de código, o que significa que iNum++ deve ser executado 100 vezes, resultando em iNum igual a 100 ao final. Aqui, a sentença break tem um parâmetro, que é a etiqueta do comando para onde o loop deve ser interrompido. Assim, a sentença break não pode apenas sair do loop for interno (usando a variável j), mas também do loop for externo (usando a variável i). Portanto, o valor final de iNum é 55, porque quando os valores de i e j são iguais a 5, o loop será interrompido.

Pode-se usar a sentença continue da mesma forma:

var iNum = 0;
outermost:
for (var i=0; i<10; i++) {
  for (var j=0; j<10; j++) {
    if (i == 5 && j == 5) {
    continue outermost;
  }
  iNum++;
  }
}
alert(iNum); // Saída "95"

No exemplo acima, a sentença continue força a continuação do loop, não apenas o loop interno, mas também o loop externo. Quando j é igual a 5, isso significa que o loop interno reduzirá 5 iterações, resultando no valor de iNum igual a 95.

Dica:Pode-se ver que as sentenças etiquetadas usadas em conjunto com break e continue são muito poderosas, mas o uso excessivo pode trazer problemas para a depuração do código. Certifique-se de que as etiquetas usadas sejam descritivas e não haja muitas camadas de loops aninhados.

Dica:Para saber o que é uma sentença etiquetada, leia Sentença de Etiqueta ECMAScript Esta seção.