JavaRush /Blog Java /Random-ES /Operadores de salto
articles
Nivel 15

Operadores de salto

Publicado en el grupo Random-ES
Java admite tres operadores de salto break: continuey return. Transfieren el control a otra parte de su programa. Consideremos cada uno de los operadores en detalle. Operadores de transición - 1

Usando el operadorbreak

El operador breaken Java se utiliza en tres casos. Primero, como ya ha visto, finaliza la secuencia de declaraciones en las ramas de las declaraciones switch. En segundo lugar, se puede utilizar para salir de un bucle. En tercer lugar, puede utilizarse como una forma "civilizada" del operador de salto incondicional goto. Esta sección explica los dos últimos casos. Usar breakpara salir de un bucle Al usar break, puede forzar que el bucle termine inmediatamente, omitiendo la expresión condicional y cualquier código restante en el cuerpo del bucle. Cuando se encuentra una declaración breakdentro de un bucle, el segundo finaliza y el control del programa se transfiere a la declaración que le sigue. Ejemplo sencillo:
// Использование 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 genera el siguiente resultado:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Aunque el bucle forestá diseñado aquí para ejecutar sus instrucciones de 0 a 99 veces, el operador breakhace que termine antes cuando i es 4. El operador breakse puede utilizar con cualquiera de los bucles de Java, incluidos los bucles intencionalmente infinitos. Por ejemplo, a continuación se muestra el programa anterior codificado mediante un bucle while. El resultado de este programa es el mismo que el de su predecesor.
// Использование 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("Цикл завершен.");
  }
}
Cuando se usa dentro de un conjunto de bucles anidados, la declaración breaksolo saldrá del bucle más interno. Por ejemplo:
// Использование 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 genera el siguiente resultado:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Como puede ver, la declaración breaken el bucle interno hace que solo termine ese bucle. El bucle exterior no se ve afectado. Hagamos dos comentarios más al respecto break. En primer lugar, pueden aparecer varias declaraciones en un bucle break. Sin embargo, tenga cuidado. Muchos de ellos tienden a desestructurar su código. En segundo lugar, el break, que termina la declaración switchafecta solo a la declaración switch(y no a los bucles que la incluyen). Comentario: Breakno fue diseñado como un medio normal de terminación de bucle. Este propósito lo cumple la expresión condicional del encabezado del bucle. El operador breakdebe utilizarse para romper el bucle sólo cuando se presenten determinadas situaciones especiales.

Usar breakcomo formulariogoto

Además de usarse en bucles y declaraciones de cambio , breaktambién se puede usar solo como una forma "civilizada" de goto. Java no contiene el operador gotoporque realiza la bifurcación de forma arbitraria y no estructurada. El código que utiliza... de forma intensiva gotosuele ser difícil de entender y mantener. También anula algunas optimizaciones del compilador. Sin embargo, hay varios lugares en un programa donde gotoel flujo de control es una construcción valiosa y legítima. Por ejemplo, gotopuede resultar útil cuando se sale de un conjunto de bucles profundamente anidados. Para manejar tales situaciones, Java define una forma extendida del operador break. Al usarlo, puede salir de uno o más bloques de código. No es necesario que estos bloques formen parte de un bucle o declaración switch. Puede ser cualquier bloque. A continuación, puede determinar exactamente dónde continuará la ejecución porque este formulario breakfunciona con la marca y proporciona los beneficios de goto, evitando sus problemas. Una breakdeclaración etiquetada tiene la siguiente forma general: break label; Aquí labelestá el nombre de una etiqueta que identifica algún bloque de código. Cuando se ejecuta este formulario break, el control se transfiere del bloque de código nombrado (cuya etiqueta se especifica en la declaración break) a la declaración que sigue a ese bloque. Un bloque de código marcado debe necesariamente incluir esta declaración break, pero no se requiere que esta inclusión sea directa (es decir, breakpuede incluirse no directamente en un bloque con etiqueta propia, sino en un bloque anidado dentro del mismo, posiblemente también marcado ). Esto significa que puede utilizar un operador marcado breakpara escapar de un conjunto de bloques anidados. Pero no puedes usar breakun bloque de código que no incluya un archivo break. Para nombrar un bloque, coloque una etiqueta al principio del bloque (antes de la llave de apertura). Una etiqueta es cualquier identificador Java válido seguido de dos puntos. Después de etiquetar un bloque, su etiqueta se puede utilizar como argumento para el operador break. Esto hará que la ejecución continúe desde el final del bloque marcado. Por ejemplo, el siguiente programa contiene tres bloques anidados, cada uno con su propia etiqueta. El operador breakavanza, más allá del final del bloque marcado con la etiqueta second, saltándose dos operadores println().
// Использование break Cómo цивoзованной формы 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.");
    }
  }
}
La ejecución de este programa genera el siguiente resultado:
Перед оператором break.
Данный оператор размещен после блока second.
Uno de los usos más comunes del operador etiquetado breakes escapar de bucles anidados. Por ejemplo, en el siguiente programa el bucle externo se ejecuta sólo una 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("Цикл завершен.");
  }
}
El programa genera el siguiente resultado:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Es fácil ver que cuando el bucle interior se interrumpe antes del final del exterior, ambos bucles terminan. Tenga en cuenta que no puede realizar breakun salto a ninguna etiqueta que no esté definida para el bloque circundante. Por ejemplo, el siguiente programa no es válido y no se compilará:
// Эта программа содержит ошибку.
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 + " ");
    }
  }
}
Debido a que un bucle marcado como no incluye una declaración break, no es posible transferir el control a este bloque.

Usando el operadorcontinue

A veces es útil comenzar temprano la siguiente iteración de un bucle. Es decir, debe continuar ejecutando el bucle, pero dejar de procesar el resto del código en su cuerpo para esta iteración en particular. De hecho, esta es una gototransición desde las siguientes operaciones del cuerpo hasta el final del bloque de bucle. Esta acción la realiza el operador continue. En los bucles, el operador whileand hace que el control se transfiera directamente a la expresión condicional que controla el bucle. En un bucle, el control pasa primero a la parte iterativa de la declaración y luego a la expresión condicional. Para los tres bucles, se omite cualquier código intermedio. A continuación se proporciona un programa de ejemplo que utiliza para imprimir dos números en cada línea: 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 la operación %(módulo) para verificar si algo está iparejo. Si es así, el bucle continúa sin imprimir un carácter de nueva línea. Salida del programa:
0 1
2 3
4 5
6 7
8 9
Al igual que con el operador break, continuepuede definir una etiqueta que indique qué bucle envolvente continuar. Un programa de ejemplo que utiliza continuepara imprimir una tabla de multiplicar triangular del 0 al 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();
  }
}
La declaración continueen este ejemplo finaliza el ciclo de evaluación jy continúa con la siguiente iteración del ciclo impulsado por i. Salida de este 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
Es extremadamente raramente útil continue. Una razón para esto es que Java proporciona un rico conjunto de sentencias en bucle que se adaptan a la mayoría de las aplicaciones. Sin embargo, para aquellas situaciones especiales en las que es necesario finalizar la iteración antes de tiempo, la declaración continueproporciona una forma estructurada de realizar esta tarea.

Operadorreturn

La última declaración de control es return. Se utiliza para regresar explícitamente desde un método, es decir, transfiere el control del programa nuevamente al programa que lo llama. El operador returnse clasifica como operador de transición. Aunque su discusión completa debe esperar hasta que se analicen los métodos, aquí se proporciona una breve descripción general return. El operador returnse puede utilizar en cualquier parte de un método para volver al programa que llama al método. La declaración returnfinaliza inmediatamente la ejecución del método en el que se encuentra. El siguiente ejemplo lo ilustra:
// Демонстрирует return.
public class Return {

  public static void main(String[] args) {
    boolean t = true;
    System.out.println("Перед оператором return.");
    if (t) {
      return; // возврат в вызывающую программу
    }
    System.out.println("Этот оператор никогда не выполнится.");
  }
}
Este returnregresa al sistema Java en tiempo de ejecución, ya que es el sistema el que llama al main(). Salida de este programa:
Перед оператором return.
Puede notar que la declaración final println()no se ejecuta. En el momento de la ejecución, returnel control se transfiere nuevamente al programa que realiza la llamada. Una nota final. En el programa anterior, el ifoperador (t) es necesario. Sin él, el compilador de Java arrojaría un error de "código inalcanzable" porque sabría que la última declaración println()nunca se ejecutaría. Para evitar este error, se utiliza el operador (t) if; engaña al compilador para esta demostración. Enlace a la fuente original: Operadores de transición
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION