martes, 17 de septiembre de 2019

¿Qué es un bucle?

Un bucle es una construcción de programación que se ejecuta repetidamente mientras se cumple alguna condición (o conjunto de condiciones). Por ejemplo, puede pedirle a un programa que lea todos los registros hasta el final de un archivo o que realice un bucle por todos los elementos de una matriz, procesando cada uno. (Aprenderá acerca de las matrices en la sección Java Collections de este tutorial).

Bucles for

La construcción de bucle básico en el lenguaje Java es la sentencia for, que le permite iterar un rango de valores para determinar cuántas veces ejecutar un bucle. La sintaxis abstracta para un bucle for es:
1
2
3
for (initialization; loopWhileTrue; executeAtBottomOfEachLoop) {
  statementsToExecute
}
Al comienzo del bucle, se ejecuta la sentencia de inicialización (las sentencias de inicialización múltiples se pueden separar con comas). Mientras loopWhileTrue (una expresión condicional de Java que debe evaluar ya sea como verdadero o falso) sea verdadero, el bucle se ejecutará. Al final del bucle, se ejecuta executeAtBottomOfEachLoop.

Ejemplo de un bucle for

Si usted quisiera cambiar a un método main() para que se ejecute tres veces, podría usar un bucle for, como se muestra en el Listado 9:
Listado 9. Un bucle for
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
  Logger l = Logger.getLogger(Person.class.getName());
  for (int aa = 0; aa < 3; aa++) {
    Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
    l.info("Loop executing iteration# " + aa);
    l.info("Name: " + p.getName());
    l.info("Age:" + p.getAge());
    l.info("Height (cm):" + p.getHeight());
    l.info("Weight (kg):" + p.getWeight());
    l.info("Eye Color:" + p.getEyeColor());
    l.info("Gender:" + p.getGender());
  }
}
La variable local aa se inicializa en cero al comienzo del listado. Esta sentencia se ejecuta solo una vez, cuando se inicializa el bucle. Luego, el bucle continúa tres veces y cada vez se incrementa aa en uno.
Como verá más adelante, una sintaxis alternativa de bucle for está disponible para realizar un bucle por las construcciones que implementan la interfaz Iterable (tales como matrices y otras clases de programas de utilidad Java). Por ahora, solo observe el uso de la sintaxis del bucle for en el Listado 9.

Bucles while

La sintaxis para un bucle while es:
1
2
3
while (loopWhileTrue) {
  statementsToExecute
}
Como puede sospechar, while loopWhileTrue evalúa como verdadero, por lo tanto el bucle se ejecutará. En la parte superior de cada iteración (es decir, antes de que se ejecute cualquier sentencia), se evalúa la condición. Si es verdadero, el bucle se ejecuta. Por lo que es posible que un bucle while nunca se ejecute si su expresión condicional no es verdadera por lo menos una vez.
Observe de nuevo el bucle for en el Listado 9. Por comparación, el Listado 10 lo codifica usando un bucle while:
Listado 10. Un bucle while
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
  Logger l = Logger.getLogger(Person.class.getName());
  int aa = 0;
  while (aa < 3) {
    Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
    l.info("Loop executing iteration# " + aa);
    l.info("Name: " + p.getName());
    l.info("Age:" + p.getAge());
    l.info("Height (cm):" + p.getHeight());
    l.info("Weight (kg):" + p.getWeight());
    l.info("Eye Color:" + p.getEyeColor());
    l.info("Gender:" + p.getGender());
    aa++;
  }
Como puede ver, un bucle while requiere un poco más de mantenimiento que un bucle for. Usted debe inicializar la variable aa y también recordar incrementarla al final del bucle.

Bucles do...while

Si usted quiere un bucle que se ejecute siempre una vez y luego verifique su expresión condicional, pruebe usar un bucle do...while, como se muestra en el Listado 11:
Listado 11. Un bucle do...while
1
2
3
4
5
6
7
8
9
10
11
12
int aa = 0;
do {
  Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
  l.info("Loop executing iteration# " + aa);
  l.info("Name: " + p.getName());
  l.info("Age:" + p.getAge());
  l.info("Height (cm):" + p.getHeight());
  l.info("Weight (kg):" + p.getWeight());
  l.info("Eye Color:" + p.getEyeColor());
  l.info("Gender:" + p.getGender());
  aa++;
} while (aa < 3);
La expresión condicional (aa < 3) no se verifica hasta el final del bucle.

Ramificación del bucle

Hay momentos en los que necesita retirarse de un bucle antes de que la expresión condicional evalúe como falso. Esto podría suceder si usted estuviera buscando una matriz de Strings para un valor particular y, una vez que lo encontrara, no le importara los otros elementos de la matriz. Para aquellos momentos en que usted solo quiere retirarse, el lenguaje Java proporciona la sentencia break, como se muestra en el Listado 12:
Listado 12. Una sentencia break
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
  Logger l = Logger.getLogger(Person.class.getName());
  int aa = 0;
  while (aa < 3) {
    if (aa == 1)
      break;
    Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
    l.info("Loop executing iteration# " + aa);
    l.info("Name: " + p.getName());
    l.info("Age:" + p.getAge());
    l.info("Height (cm):" + p.getHeight());
    l.info("Weight (kg):" + p.getWeight());
    l.info("Eye Color:" + p.getEyeColor());
    l.info("Gender:" + p.getGender());
    aa++;
  }
La sentencia break lo lleva a la siguiente sentencia ejecutable fuera del bucle en el que se ubica.

Continuación del bucle

En el ejemplo (simplista) del Listado 12, usted solo quiere ejecutar el bucle una vez y retirarse. También puede saltar una sola iteración de un bucle pero continúa ejecutando el bucle. Para eso, necesita la sentencia continue, que se muestra en el Listado 13:
Listado 13. Una sentencia continue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {
Logger l = Logger.getLogger(Person.class.getName());
int aa = 0;
while (aa < 3) {
  if (aa == 1)
    continue;
  else
    aa++;
  Person p = new Person("Joe Q Author", 42, 173, 82, "Brown", "MALE");
  l.info("Loop executing iteration# " + aa);
  l.info("Name: " + p.getName());
  l.info("Age:" + p.getAge());
  l.info("Height (cm):" + p.getHeight());
  l.info("Weight (kg):" + p.getWeight());
  l.info("Eye Color:" + p.getEyeColor());
  l.info("Gender:" + p.getGender());
}

En el Listado 13, usted salta la segunda iteración de un bucle pero continúa con la tercera. continue es de ayuda cuando está, digamos, procesando registros y se encuentra con un registro que definitivamente no quiere procesar. Solo salte ese registro y siga con el siguiente.

No hay comentarios:

Publicar un comentario