JavaRush /Blogue Java /Random-PT /Operadores de salto
articles
Nível 15

Operadores de salto

Publicado no grupo Random-PT
Java suporta três operadores de salto break- continuee return. Eles transferem o controle para outra parte do seu programa. Vamos considerar cada um dos operadores detalhadamente. Operadores de transição - 1

Usando o operadorbreak

O operador breakem Java é usado em três casos. Primeiro, como você já viu, ele encerra a sequência de instruções nas ramificações de instruções switch. Em segundo lugar, pode ser usado para sair de um loop. Em terceiro lugar, pode ser usado como uma forma "civilizada" do operador de salto incondicional goto. Esta seção explica os dois últimos casos. Use breakpara sair de um loop Usando break, você pode forçar o encerramento imediato do loop, ignorando a expressão condicional e qualquer código restante no corpo do loop. Quando uma instrução breaké encontrada dentro de um loop, o segundo termina e o controle do programa é transferido para a instrução que o segue. Exemplo simples:
// Использование break для выхода из цикла.
public class BreakLoop {

  public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
      if (i == 4) {
        break; // завершить цикл, если i = 4
      }
      System.out.println("i: " + i);
    }
    System.out.println("Цикл завершен.");
  }
}
Este programa gera a seguinte saída:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Embora o loop forseja projetado aqui para executar suas instruções de 0 a 99 vezes, o operador breakfaz com que ele termine mais cedo quando i for 4. O operador breakpode ser usado com qualquer um dos loops de Java, incluindo loops intencionalmente infinitos. Por exemplo, abaixo está o programa anterior codificado usando um loop while. A saída deste programa é a mesma do seu antecessor.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {

  public static void main(String[] args) {
    int i = 0;
    while (i < 100) {
      if (i == 4) {
        break; // закончить цикл, если i = 4
      }
      System.out.println("i: " + i);
      i++;
    }
    System.out.println("Цикл завершен.");
  }
}
Quando usada em um conjunto de loops aninhados, a instrução breaksairá apenas do loop mais interno. Por exemplo:
// Использование break во вложенных циклах.
public class BreakLoop3 {

  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 10; j++) {
        if (j == 4) {
          break; // закончить цикл, если j = 4
        }
        System.out.print(j + " ");
      }
      System.out.println();
    }
    System.out.println("Цикл завершен.");
  }
}
Este programa gera a seguinte saída:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Como você pode ver, a instrução breakno loop interno faz com que apenas esse loop termine. O loop externo não é afetado. Façamos mais dois comentários a respeito break. Primeiro, múltiplas instruções podem aparecer em um loop break. No entanto, tenha cuidado. Muitos deles tendem a desestruturar seu código. Segundo, o break, que encerra a instrução - switchafeta apenas a instrução - switch(e não os loops que a incluem). Comente: Breaknão foi projetado como um meio normal de terminação de loop. Esse propósito é atendido pela expressão condicional do cabeçalho do loop. A instrução breaksó deve ser usada para quebrar o ciclo quando surgirem certas situações especiais.

Use breakcomo um formuláriogoto

Além de ser usado em instruções switch e loops, breaktambém pode ser usado sozinho como uma forma "civilizada" do arquivo goto. Java não contém o operador gotoporque executa a ramificação de forma arbitrária e não estruturada. Código que usa .intensamente gotonormalmente é difícil de entender e manter. Também substitui algumas otimizações do compilador. Existem, no entanto, vários locais em um programa onde gotoo fluxo de controle é uma construção valiosa e legítima. Por exemplo, gotopode ser útil quando você está saindo de um conjunto de loops profundamente aninhados. Para lidar com tais situações, Java define uma forma estendida do operador break. Usando-o, você pode sair de um ou mais blocos de código. Esses blocos não precisam fazer parte de um loop ou instrução switch. Pode ser qualquer bloco. A seguir, você pode determinar exatamente onde a execução continuará porque esse formulário breakfunciona com a marca e oferece os benefícios de goto, contornando seus problemas. Uma breakinstrução rotulada tem a seguinte forma geral: break label; Aqui labelestá o nome de um rótulo que identifica algum bloco de código. Quando este formulário breaké executado, o controle é transferido do bloco de código nomeado (cujo rótulo é especificado na instrução break) para a instrução seguinte a esse bloco. Um bloco de código marcado deve incluir esta instrução break, mas não é necessário que esta inclusão seja direta (ou seja, breakpode ser incluída não diretamente em um bloco com rótulo próprio, mas em um bloco aninhado dentro dele, possivelmente também marcado) . Isso significa que você pode usar um operador marcado breakpara escapar de um conjunto de blocos aninhados. Mas você não pode usar breakum bloco de código que não inclua um arquivo break. Para nomear um bloco, coloque um rótulo no início do bloco (antes da chave de abertura). Um rótulo é qualquer identificador Java válido seguido por dois pontos. Depois de rotular um bloco, seu rótulo pode ser usado como argumento para o operador break. Isto fará com que a execução continue a partir do final do bloco marcado. Por exemplo, o programa a seguir contém três blocos aninhados, cada um com seu próprio rótulo. O operador breakavança, além do final do bloco marcado com o rótulo second, pulando dois operadores println().
// Использование break How цивorзованной формы goto.
public class Break {

  public static void main(String[] args) {
    boolean t = true;
    first:
    {
      second:
      {
        third:
        {
          System.out.println("Перед оператором break.");
          if (t) {
            break second; // выход из блока second
          }
          System.out.println("Данный оператор никогда не выполнится");
        }
        System.out.println("Данный оператор никогда не выполнится ");
      }
      System.out.println("Данный оператор размещен после блока second.");
    }
  }
}
A execução deste programa gera a seguinte saída:
Перед оператором break.
Данный оператор размещен после блока second.
Um dos usos mais comuns do operador marcado breaké escapar de loops aninhados. Por exemplo, no programa a seguir, o loop externo é executado apenas uma vez:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
      for (int j = 0; j < 100; j++) {

        if (j == 10) {
          break outer; // выйти из обоих циклов
        }
        System.out.print(j + " ");
      }
      System.out.println("Эта строка никогда не будет выведена");
    }
    System.out.println("Цикл завершен.");
  }
}
O programa gera a seguinte saída:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
É fácil ver que quando o loop interno é interrompido antes do final do loop externo, ambos os loops terminam. Tenha em mente que você não pode breakpular para qualquer rótulo que não esteja definido para o bloco envolvente. Por exemplo, o programa a seguir é inválido e não será compilado:
// Эта программа содержит ошибку.
public class BreakErr {

  public static void main(String[] args) {
    one:
    for (int i = 0; i < 3; i++) {
      System.out.print("Итерация " + i + ": ");
    }
    for (int j = 0; j < 100; j++) {
      if (j == 10) {
        break one; //He верно!
      }
      System.out.print(j + " ");
    }
  }
}
Como um loop marcado como 1 não inclui uma instrução break, não é possível transferir o controle para este bloco.

Usando o operadorcontinue

Às vezes é útil iniciar a próxima iteração de um loop mais cedo. Ou seja, você precisa continuar executando o loop, mas parar de processar o restante do código em seu corpo para esta iteração específica. Na verdade, esta é uma gototransição das próximas operações do corpo até o final do bloco de loop. Esta ação é executada pelo operador continue. Em loops, o operador whileand faz com que o controle seja transferido diretamente para a expressão condicional que controla o loop. Num loop, o controle passa primeiro para a parte iterativa da instrução e depois para a expressão condicional. Para todos os três loops, qualquer código intermediário é ignorado. Um exemplo de programa que usa para imprimir dois números em cada linha é fornecido abaixo: do whilecontinueforforcontinue
// Демонстрирует continue.
public class Continue {

  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      System.out.print(i + " ");
      if (i % 2 == 0) {
        continue;
      }
      System.out.println("");
    }
  }
}
Este código usa a operação %(módulo) para verificar se algo está ipar. Nesse caso, o loop continua sem imprimir um caractere de nova linha. Saída do programa:
0 1
2 3
4 5
6 7
8 9
Assim como acontece com o operador break, continuevocê pode definir um rótulo indicando qual loop envolvente deve continuar. Um programa de exemplo que usa continuepara imprimir uma tabuada de multiplicação triangular de 0 a 9.
// Использование continue с меткой.
public class ContinueLabel {

  public static void main(String[] args) {
    outer:
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
        if (j > i) {
          System.out.println();
          continue outer;
        }
        System.out.print(" " + (i * j));
      }
    }
    System.out.println();
  }
}
A instrução continueneste exemplo encerra a avaliação do loop je continua com a próxima iteração do loop conduzido por i. Saída deste programa:
0
 0 1
 0 2 4
 0 3 6 9
 0 4 8 12 16
 0 5 10 15 20 25
 0 6 12 18 24 30 36
 0 7 14 21 28 35 42 49
 0 8 16 24 32 40 48 56 64
 0 9 18 27 36 45 54 63 72 81
É extremamente raramente útil continue. Uma razão para isso é que Java fornece um rico conjunto de instruções de loop que atendem à maioria das aplicações. Contudo, para aquelas situações especiais em que é necessário terminar a iteração mais cedo, a instrução continuefornece uma forma estruturada de realizar esta tarefa.

Operadorreturn

A última instrução de controle é return. É usado para retornar explicitamente de um método, ou seja, transfere o controle do programa de volta para o programa chamador. O operador returné classificado como operador de transição. Embora sua discussão completa deva esperar até que os métodos sejam discutidos, uma breve visão geral é fornecida aqui return. O operador returnpode ser usado em qualquer lugar de um método para voltar ao programa que chama o método. A instrução returnencerra imediatamente a execução do método em que está. O exemplo a seguir ilustra isso:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Isso returnretorna ao sistema Java em tempo de execução, pois é o sistema que chama o arquivo main(). Saída deste programa:
Перед оператором return.
Você pode notar que a instrução final println()não é executada. No tempo de execução, returno controle é transferido de volta para o programa chamador. Uma nota final. No programa anterior, o ifoperador (t) é necessário. Sem ele, o compilador Java geraria um erro de “código inacessível” porque saberia que a última instrução println()nunca seria executada. Para evitar esse erro, o operador (t) é usado if; ele engana o compilador para esta demonstração. Link para a fonte original: Operadores de transição
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION