¿Por qué veo tantas construcciones para (;;)? [cerrado]

14

En mi forma de pensar, un bucle for se usa para recorrer en iteración un rango conocido o determinable.

String[] names = //something;
for ( int i = 0; i < names.length; i++ ) { //do stuff }

que es equivalente (alcance de i aparte) a:

String[] names = //something;
int i = 0;
while (i < names.length )
{
   // do stuff
   i++;
}

En otras palabras, el bucle for es simplemente un azúcar sintáctico (muy útil) para un constructo while utilizado comúnmente.

Sin embargo, estoy viendo muchas construcciones for(;;) en la web que son funcionalmente equivalentes a while(true)

¿Cuál es el razonamiento de esto? ¿Por qué se preferiría el bucle infinito para el bucle infinito?

// ¡Incluso vi un libro de texto de java que no usaba mientras que los bucles en absoluto! Conduciendo a construcciones tan monstruosas como:

String input = getInput();
for( ; !inputIsValid(input) ; )
{
   //redo;
}
    
pregunta Chris Cudmore 10.11.2011 - 16:35

5 respuestas

33

Es una retención de las antiguas prácticas de programación en el PDP-11 (sí, dije antiguo ). Se solía guardar una sola instrucción, que era útil para hacer que los bucles se ejecuten más rápido.

Consulte la siguiente información adicional: enlace

    
respondido por el Edward Robertson 10.11.2011 - 17:04
10

algunos compiladores darán una advertencia (algo como la expresión condicional es constante ) cuando se usa while( 1 ) pero con for( ; ; ) no hay nada de qué advertir. Los programadores quieren código sin advertencias, por lo que usan la variante for.

    
respondido por el stijn 10.11.2011 - 17:16
5

Es un hábito adquirido de la programación en C donde no hay un tipo booleano. Si bien (1) sería el equivalente potencial, pero For (;;) se usa a menudo como aparece en K & R si recuerdo correctamente. Sospecho que también había una razón de hardware en alguna parte.

    
respondido por el World Engineer 10.11.2011 - 17:01
3

para (;;) se puede leer como "para siempre", lo que algunos encuentran más natural que "while true".

    
respondido por el Oskar N. 11.11.2011 - 00:06
-2

Todos los programadores experimentados que he preguntado pueden reconocer for(;;) más rápidamente que while(true) o while(1) .

    
respondido por el kevin cline 11.11.2011 - 01:58

Lea otras preguntas en las etiquetas