Los bucles do-while y while en Java son los únicos que quedan en la lista de artículos sobre estructuras de Java que incluyen una condición booleana. Son muy similares, y en este artículo vamos a ver, como es costumbre, su estructura, funcionamiento y posibles trampas que te puedes encontrar en el examen OCAJ8P.
More...
Después del descanso de Navidad y Año Nuevo, ha llegado el momento de reanudar el aprendizaje :).
¿Qué son los bucles do-while y while en Java?
Reflejos de reflejos, en bucle
Los bucles do-while y while en Java te permiten, como su nombre indica (while significa mientras), repetir una acción en un bucle siempre y cuando se cumpla una condición booleana de control. Es posible que el código contenido en un bucle while no se ejecute, porque no se cumpla la condición. No obstante, el código contenido en un bucle do-while se ejecuta, por lo menos, una vez.
Si quieres saber más sobre los bucles en Java, échale un ojo también al artículo que he publicado sobre los bucles for y for-each.
¿Cuál es la estructura de los bucles do-while y while en Java?
La diferencia entre ambos es que, en el bucle while, la condición booleana se evalúa antes de que se ejecute el código. En cambio, en un bucle do-while primero se ejecuta una vez el código (do) y, a continuación, se evalúa la condición. Si esta no se cumple, el hilo de ejecución sale del bucle.
Como ves, tanto el bucle do-while como el bucle while solo evalúan una condición dada. A diferencia del bucle for, no contienen en su estructura ningún elemento que la modifique. En los bucles do-while y while en Java es responsabilidad tuya asegurarte de que la condición se cumple antes o después. De lo contrario, entras en un bucle infinito:
Uso de las llaves en los bucles do y do-while
Tanto el bucle do-while como el while pueden prescindir de las llaves si solo contienen una línea de codigo. Recuerda que "una línea" termina con el primer punto y coma:
No olvides colocar un punto y coma (;) después de la evaluación while en el bucle do-while.
No obstante, si el bucle while no contiene código, puedes prescindir de las llaves. Con el bucle do-while no puedes hacerlo:
Fíjate que, en este caso, cuando prescindes de las llaves en el bucle while también has de usar un punto y coma.
Por el contrario, el bucle do-while sin código no puede prescindir de las llaves:
Recuerda: un bucle do-while puede prescindir de las llaves únicamente cuando contiene una línea de código.
Condición booleana: ámbito de la variable
En un artículo anterior sobre las condiciones booleanas ya te expliqué las diversas estructuras que podía adoptar un condición booleana. Como sabes, las condiciones booleanas suelen aparecer antes del código que se ejecuta si esta se cumple. Una excepción ocurre, como acabas de ver, en el bucle do-while.
En el caso del bucle do-while, no puedes evaluar una referencia, o variables, declaradas dentro del mismo bucle.
Esto se debe a una razón obvia.
Aunque modificases el valor de la variable o del objeto al que apunta la referencia, con cada iteración esta referencia o variable se volvería a declarar, volviendo a adquirir su valor original.
Uso del valor false explícito o de variables finales
En el bucle while no puedes utilizar como condición booleana:
Dicho esto, ¿qué crees que ocurre en el siguiente ejemplo?
A pesar de que el bucle while no contiene código, no se puede utilizar una variable booleana con el valor false y marcada como final. No tiene sentido, pero es así.
El bucle do-while, al permitir que el código que contiene se ejecute por lo menos una vez, no tiene estas limitaciones. No importa qué condición booleana utilices. El código nunca va a ser inalcanzable.
Ejercicios de hoy
Tienes que estar muy atento a estos pequeños detalles cuando te enfrentes al examen. Te aconsejo que utilices un editor de texto sencillo (sin colores), para acostumbrarte a ver código sin resaltar.
Además, el editor de texto te va a obligar a insertar los imports necesarios, que un IDE realiza en segundo plano.
Practica las estructuras básicas varias veces; intenta pensar en cómo podrían pillarte en el examen. Sabes, por ejemplo, que una asignación devuelve un valor, que coincide con el valor asignado?
Mira el siguiente ejemplo:
¿Entiendes qué ocurre?