¿Por qué la condición de un bucle for puede dejarse vacía? [duplicate]

3 minutos de lectura

avatar de usuario
Marlon

Posible duplicado:

Sin condición de bucle en el bucle for y while

¿Por qué la condición en un for-loop ¿Se puede dejar vacío? Por ejemplo

for (;;)

compila bien. ¿Por qué esta expresión vacía se evalúa como true pero lo siguiente

if () {}
while () {}

ambos fallaran? quiero saber si / por qué la for-loop es una excepción a este caso.

  • ¿Porque alguien pensó que era conveniente?

    – pubis

    13 de noviembre de 2012 a las 18:13

  • @Pubby, ¿puedes dar más detalles? y me haces una pregunta?

    – Alex Gordon

    13 de noviembre de 2012 a las 18:13

  • Voy a adivinar la razón por la cual es la compatibilidad con C.

    –Joseph Mansfield

    13 de noviembre de 2012 a las 18:14

  • Es así porque así lo eligieron los diseñadores del lenguaje.

    – taza de café

    13 de noviembre de 2012 a las 18:15

  • La respuesta corta es: porque así fue diseñado el lenguaje. La respuesta un poco más larga, supongo que sería que un vacío if() simplemente no tiene sentido: ¿si qué? Si quieres eso, solo haz: { /* code */ } y, del mismo modo, un vacío while() tampoco tiene sentido… mientras que? Considerando que, un for(something; ; something) { /* something */ } tiene sentido: “ejecuta esto y nunca salgas (a menos que te diga lo contrario desde adentro por sí mismo”

    – Nik Bougalis

    13 de noviembre de 2012 a las 18:20

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

Estas son las sentencias de iteración.

while (expresión) declaración

hacer sentencia while (expresión);

para (expresión [opt] ; expresión [opt] ; expresión [opt] ) declaración

for (expresión de declaración [opt] ; expresión [opt] ) declaración

El ciclo while fue diseñado para evaluar la expresión de control antes de cada ejecución del bucle y del bucle do se diseñó para evaluar después cada ejecución.

El ciclo for fue diseñado como una declaración de iteración más sofisticada.

6.8.5.3 La sentencia for

La declaración

for (cláusula-1; expresión-2; expresión-3) instrucción

se comporta de la siguiente manera: La expresión expresión-2 es la expresión de control que se evalúa antes de cada ejecución del cuerpo del bucle. La expresión expresión-3 se evalúa como una expresión vacía después de cada ejecución del cuerpo del bucle. Si la cláusula-1 es una declaración, el alcance de los identificadores que declara es el resto de la declaración y el bucle completo, incluidas las otras dos expresiones; se alcanza en el orden de ejecución antes de la primera evaluación de la expresión de control. Si la cláusula-1 es una expresión, se evalúa como una expresión vacía antes de la primera evaluación de la expresión de control.

Tanto la cláusula-1 como la expresión-3 se pueden omitir. Una expresión omitida-2 se reemplaza por una constante distinta de cero.

La especificación permite omitir expresión-2, la condición del ciclo, y reemplazarla por una constante distinta de cero. Esto significa que el ciclo for continuará ejecutándose indefinidamente.

Esto es útil para permitir una sintaxis simple para iterar sin fin.

for(int i = 0;;i++) { //do stuff with i }

Eso es mucho más simple de escribir y entender que escribir un ciclo while(1) con una variable declarada fuera del ciclo y luego incrementada dentro del ciclo.

Luego, la especificación del ciclo for le permite omitir la cláusula 1 para que pueda declarar o inicializar variables en otro lugar, y puede omitir la expresión 3 para que no tenga que evaluar ninguna expresión al completar cada ciclo.

El bucle for es un caso especial. El ciclo while y el ciclo do son estrictos y requieren una expresión, pero el ciclo for es una declaración de iteración flexible.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad