Se trata de dos instrucciones que permiten modificar el comportamiento de otras estructuras o
sentencias de control, simplemente por el hecho de estar incluidas en algún punto de su
secuencia de instrucciones.
La sentencia break incidirá sobre las estructuras de
control switch, while
, for y do-while
del siguiente modo:
- Si aparece una sentencia break dentro de la secuencia de instrucciones de cualquiera de
las estructuras mencionadas anteriormente, dicha estructura terminará inmediatamente.
- Si aparece una sentencia b
reak
dentro de un bucle anidado sólo finalizará
ejecución del bucle más interno en el que se encuentra, el resto se ejecuta de forma
normal.
Es decir, que break sirve para romper el flujo de control de un bucle, aunque no se haya
cumplido la condición del bucle. Si colocamos un break dentro del código de un bucle, cuando
se alcance el break, automáticamente se saldrá del bucle pasando a ejecutarse la siguiente
instrucción inmediatamente después de él.
Aquí tienes un ejemplo de cómo se utilizaría la sentencia break dentro de un bucle for.
/**
* Ejemplo de uso de la sentencia de salto break
*/
public class SentenciaBreak {
public static void main(String[] args) {
// Declaración de variables
int contador;
1
//Procesamiento y salida de información
/* Este bucle sólo se ejecutará en 6 ocasiones, ya que cuando
* la variable contador sea igual a 7 encontraremos un break que
* romperá el flujo del bucle, transfiriéndonos el control a la
* sentencia que imprime el mensaje de Fin del programa.
*/
for (contador=1;contador<=10;contador++){
if (contador==7)
break;
System.out.println ("Valor: " + contador); // Es una forma muy inapropiada de salir del bucle!!
}
System.out.println ("Fin del programa");
}
}
¡Recuerda!
Debemos saber cómo funciona break, pero su
uso, salvo en el caso del switch, donde es obligado usarlo para evitar una "ejecución en
cascada", se desaconseja, y siempre es evitable.
La
salida de cualquier ciclo usando break es en
general una mala práctica de programación, que esconde una mala
planificación de la lógica asociada al ciclo. La salida natural y única de cada ciclo debe ser comprobando la
condición de control del mismo, único punto donde debemos comprobar si ha llegado o no el
momento de terminarlo. Cualquier comprobación de cualquier condición de salida dentro del
cuerpo del bucle para forzar la salida del bucle desde el interior del mismo usando break,
debería haberse incorporado a la condición de control del mismo, y supone ir abriendo
puertas traseras de salida que hacen que el código se haga cada vez más complicado de
entender y mantener. ¡¡Evita usar break siempre que sea posible!! Y salvo el caso de switch,
siempre es posible.
La sentencia continue incidirá sobre las sentencias o
estructuras de control while, for
y do-while del siguiente modo:
- Si aparece una sentencia continue dentro de la secuencia de instrucciones de cualquiera
de las sentencias anteriormente indicadas, dicha sentencia dará por terminada la
iteración actual y se ejecuta una nueva iteración, evaluando de nuevo la expresión
condicional del bucle.
- Si aparece en el interior de un bucle anidado solo detendrá la ejecución de la iteración
del bucle más interno en el que se encuentra, el resto se ejecutaría de forma normal.
Es decir, la sentencia continue
forzará a que se ejecute la siguiente iteración
del bucle, ignorando y saltándose las instrucciones que pudiera haber después del continue,
y hasta el final del código del bucle, para esta iteración.
Aquí tienes un ejemplo de cómo se utilizaría la sentencia continue dentro de un bucle for
para mostrar por pantalla los números pares que hay entre el 1 y el 10:
/**
* Ejemplo de uso de la sentencia de salto continue
*/
public class EjemploSentenciaContinue {
public static void main(String[] args) {
// Declaración de variables
int contador;
//Procesamiento y salida de información
System.out.println ("Imprimiendo los números pares que hay del 1 al 10... ");
for (contador=1;contador<=10;contador++){
if (contador % 2 != 0)
continue;
System.out.print(contador + " ");
}
System.out.println ("\nFin del programa");
/* Las iteraciones del bucle que generarán la impresión de cada uno de los números
* pares, serán aquellas en las que el resultado de calcular el resto de la división
* entre 2 de cada valor de la variable contador, sea igual a 0.
*/
}
}
¡¡Recuerda!!
Con la sentencia continue, también se
desaconseja el uso. Igual que pasaba con el uso de break, es en general una mala práctica de programación, que esconde
un mal diseño de la lógica asociada al ciclo. De hecho, la sentencia continue,
como en el ejemplo de la imagen anterior, se pondría dentro de un if para que se ejecute
dependiendo de una condición. La sentencia continue lo que hace implícitamente de
hecho, es meter las demás sentencias que siguen a partir de ella en una "invisible" cláusula
else del condicional, ya que sólo serán alcanzables y ejecutables en el caso de que la
condición sea falsa y por tanto no se ejecute continue. Si un grupo de sentencias del bucle
deben dejar de ejecutarse bajo ciertas circunstancias, lo que hay que hacer es incluirlas en
un condicional que compruebe dicha condición, y que se salte esas sentencias cuando sea
oportuno.
Para clarificar algo más el funcionamiento de ambas sentencias de salto, vuelve a mirar
detenidamente el diagrama representativo del comienzo de este epígrafe.