Recientemente, en un libro he leído este código. ¿Puede definir los medios de este código y cómo funciona este código?Cómo funciona este bucle en C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Recientemente, en un libro he leído este código. ¿Puede definir los medios de este código y cómo funciona este código?Cómo funciona este bucle en C#
int i = 0;
for (; i != 10;)
{
Console.WriteLine(i);
i++;
}
Loops.
Como ya ha configurado i=0
arriba, han omitido esa sección del for
loop. Además, dado que estás incrementando la variable al final, también la han omitido.
Básicamente acaban de convertir un bucle for en un bucle while.
Probablemente sería más elegante como:
int i = 0;
while(i != 10)
{
Console.WriteLine(i);
i++;
}
, así como inicializar i fuera del bucle para darle un alcance mayor, también permite que el incremento se realice en una condición dentro del bucle, p. i + = 2 o i-- o algo así, sin tener que compensar lo que se especificó en la tercera parte del ciclo for. Pero sí, al igual que hace un tiempo creo que – Jacob
@Jacob, +1 por la captura del alcance, ni siquiera pensé en eso. –
Si es más fácil de ver en forma normal, es casi el equivalente a esto:
for (int i = 0; i != 10; i++)
{
Console.WriteLine(i);
}
Con la excepción de que deja i
disponible para el usuario una vez que se completa el bucle, no tiene el alcance del bucle for
.
Es el mismo que este bucle:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
excepción, la variable i
se declara fuera del bucle, por lo que es ámbito de aplicación es más grande.
En un bucle for
, el primer parámetro es la inicialización, el segundo es la condición y el tercero es el incremento (que en realidad puede ser prácticamente cualquier cosa). El libro muestra cómo la inicialización y el incremento se mueven al lugar en el código donde se ejecutan realmente. El bucle también puede ser mostrado como el bucle equivalente while
:
int i = 0;
while (i != 10) {
Console.WriteLine(i);
i++;
}
Aquí la variable i
también es declarado fuera del bucle, por lo que el alcance es más grande.
está usando el "para", como un "mientras que"
Este código podría ser reescrita, (en el contexto de su fragmento de código - que no es equivalente como se ha dicho.) Como:
for (int i = 0; i != 10; i++)
Console.WriteLine(i);
Básicamente, la expresión de inicialización y la expresión de incremento se han sacado de la expresión de bucle for, que son puramente opcionales.
Me gustaría señalar que lo que ha publicado no es * equivalente *, existe una diferencia de alcance. –
Gracias @Nick, editado según su sugerencia. –
Es igual a:
for (int i = 0; i != 10; i++) {
Console.WriteLine(i);
}
por favor no escribir código como eso. Es feo y derrota el propósito de for-loops.
La sentencia for se define en el # spec C como
para (para-inicializador; para-condición; para-iterador) incrustado-declaración
Los tres de for-initializer, para-condición, un d for-iterator son opcionales. El código funciona porque esas piezas no son necesarias.
Para los curiosos: si se omite para-condición, el bucle se comporta como si había un para-condición que produjo cierto. Por lo tanto, sería actuar como bucle infinito, lo que requiere una instrucción de salto para salir ( descanso, Goto, tiro, o de retorno).
Como int i
se declaró en la parte superior, por lo que no estaba en el ciclo for. esto es absolutamente como
for(int i = 0; i!=10; i++)
{
/// do your code
}
interesante, que no se ve que antes de ... – Yoda
@Yoda - Probablemente porque su forma mala. Legal, pero mala forma. –
Sorprendido de que no hay votos para esta pregunta. +1 para volver a lo básico. –