¿Cómo funciona un bucle for, específicamente for(;;)?

Resuelto Frank asked hace 13 años • 6 respuestas

Al revisar un código de empresa antiguo, encontré un bucle for que se parece a este:

for (;;) {
    //Some stuff
}

Probé en Google pero no pude encontrar ninguna respuesta. ¿Me quedé dormido en una clase de programación o se trata de un bucle inusual?

Frank avatar Aug 16 '11 23:08 Frank
Aceptado

Un forbucle en Java tiene la siguiente estructura:

for (initialization statement; condition check; update)
    loop body;

Como puede ver, aquí hay cuatro declaraciones:

  1. Declaración de inicialización: esta declaración se ejecuta solo una vez, cuando se ingresa al bucle por primera vez. Esta es una declaración opcional, lo que significa que puede elegir mantener este campo en blanco. Generalmente se utiliza para algún propósito de inicialización.
  2. Verificación condicional: esta afirmación es probablemente la más importante. Comprueba si cierta expresión se evalúa como verdadera o no. Si es así, la ejecución del bucle continúa. Puede optar por mantener este campo vacío, que se evaluará como true.
  3. Actualización: esta lista de declaraciones se ejecuta de izquierda a derecha y generalmente se usa para incrementar/disminuir alguna variable.
  4. Cuerpo del bucle: el cuerpo del bucle, que se ejecutará una y otra vez según el valor de verdad de la verificación condicional.

Básicamente, así es como sigue la ejecución: primero, cuando se ingresa al bucle por primera vez, la declaración de inicialización se ejecuta una vez. Luego se ejecuta la verificación condicional para ver si la evaluación es verdadera. Si es así, entonces se ejecuta el cuerpo del bucle; de ​​lo contrario, la ejecución del bucle finaliza. Después de eso, se ejecutan las declaraciones de actualización. A continuación, se ejecuta nuevamente la verificación condicional, y si se evalúa como verdadero, nuevamente se ejecuta el cuerpo del bucle, luego se ejecuta la declaración de actualización, luego nuevamente la verificación condicional... ya entiendes la imagen.

Ahora sobre tu for( ; ; )sintaxis. No tiene declaración de inicialización, por lo que no se ejecutará nada. Su declaración de verificación condicional también está vacía, lo que significa que se evalúa como verdadera después de ejecutar el cuerpo del bucle. A continuación, dado que la declaración de actualización está vacía, no se ejecuta nada. Luego se realiza nuevamente la verificación condicional, que nuevamente se evaluará como verdadera y luego todo este proceso se repetirá nuevamente.

Como puede ver, esto es básicamente un bucle infinito que no tiene una declaración de inicialización, cuya verificación condicional siempre se evaluará como verdadera y que no tiene una declaración de actualización. Esto es equivalente a -

while(true)
{
    .....
}

que es otra construcción de bucle popular en Java.

Cuando usas un bucle infinito como este, es importante prestar atención a la condición de interrupción ya que en la mayoría de los casos no puedes dejar que un bucle se ejecute indefinidamente. Para salir de este tipo de bucles, puede utilizar la breakdeclaración. La estructura es la siguiente:

if(some_condition_is_true)
    break;        // This will cause execution to break out of its nearest loop

o

if(some_condition_is_false)
    break;
MD Sayem Ahmed avatar Aug 16 '2011 16:08 MD Sayem Ahmed

Esto es lo mismo que:

while(true) {
  //Some Stuff
}

Básicamente, una sintaxis alternativa para un bucle infinito.

Marcelo avatar Aug 16 '2011 16:08 Marcelo

Todos estos son bucles infinitos.

for(;;) {
   // endlessly
}

while(true) {
   // endlessly
}

do {
   // endlessly
} while(true);
Peter Lawrey avatar Aug 16 '2011 16:08 Peter Lawrey

Este bucle no tiene protección y actúa como un bucle while (verdadero). Se repetirá infinitamente hasta un descanso.

Aram Kocharyan avatar Aug 16 '2011 16:08 Aram Kocharyan