A mi modo de pensar, un bucle for se utiliza para iterar sobre 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 for
bucle es simplemente un azúcar sintáctico (muy útil) para una while
construcción comúnmente utilizada .
Sin embargo, veo muchas for(;;)
construcciones en la web que son funcionalmente equivalentes awhile(true)
¿Cuál es el razonamiento para esto? ¿Por qué se preferiría el bucle infinito for sobre el bucle infinito while?
// ¡Incluso vi un libro de texto de Java que no usaba bucles while! Conduciendo a construcciones tan monstruosas como:
String input = getInput();
for( ; !inputIsValid(input) ; )
{
//redo;
}
language-agnostic
coding-style
Chris Cudmore
fuente
fuente
while
yfor
aquí y la pregunta no cambiaría.while(true)
yfor(;;)
significa lo mismo. Obviamente tiene una fuerte preferencia porwhile
, otros pueden tener una preferencia igualmente fuerte porfor
. Es imposible decir que uno es más correcto que el otro.for(;;)
confuso en absoluto. Es un lenguaje C estándar, uno que documentará en la sección 3.5 de K&R (2e). Yo entiendo que usted no me gusta; se debe entender que otros prefieren obviamente ella (lo contrario nunca lo vería). Puede ser más o menos aceptable en lenguajes distintos de C; ha etiquetado este lenguaje independiente que solo disminuye la posibilidad de una respuesta definitiva. Nuevamente, voté para cerrar porque la Q no es constructiva; si me hubiera ofendido, habría marcado como ofensivo en lugar de o además del cierre. Eso es todo.wheeeeeeee { ... }
Respuestas:
Es una retención de las viejas prácticas de programación en el PDP-11 (sí, dije viejo ). Solía guardar una sola instrucción, que era útil para hacer que los bucles se ejecuten más rápido.
Consulte lo siguiente para obtener información adicional: http://www.flounder.com/exceptions.htm
fuente
for(;;)
sintaxis como (en su opinión) una declaración más directa de intención de que no se establecieran criterios para salir del bucle.while(1) { }
.algunos compiladores darán una advertencia (algo así como la expresión condicional es constante ) cuando se usa
while( 1 )
perofor( ; ; )
no hay nada de qué advertir. Los programadores quieren código sin advertencias, por lo que usan la variante for.fuente
Es un hábito adquirido de la programación en C donde no hay un tipo booleano. Mientras que (1) sería el equivalente potencialmente, pero For (;;) se usa a menudo como se muestra en K&R si no recuerdo mal. Sospecho que también había una razón de hardware en alguna parte.
fuente
porque (;;) puede leerse como "para siempre", lo que algunos consideran más natural que "mientras sea verdadero".
fuente
Todos los programadores experimentados que he pedido pueden reconocer
for(;;)
más rápido quewhile(true)
owhile(1)
.fuente
for(;;)
14 ms más rápido quewhile(1)
:-)