?id=3e346df1-047d-44c1-9ea4-73d42331df4d
Una diferencia importante entre los Bucles 'for' en C# y VB.NET
por José M. Alarcón
Consideremos el sigueinte bucle 'for' escrito en C#:
int n = 10;
for (int i=0; i < n; i++)
{
Console.WriteLine(i.ToString());
n--;
}
Muy sencillo. La pregunta es: dado que dentro del bucle modificamos el valor de la variable "límite" (n), ¿cuántas veces se ejecutará? ¿10 o 5?
Parece una pregunta tonta pero no lo es tanto. Depende de cómo se haya implementado internamente el bucle en el compilador de C#. Es posible que se ejecute 10 veces si el bucle almacena el valor al principio y en cada vuelta compara con este valor incial (esto puede ser más eficiente en muchos casos). Por otra parte si se compara el valor real en cada vuelta en realidad el bucle se ejecutará sólo 5 veces.
La respuesta a la pregunta es la siguiente: en C# el valor real se compara en cada vuelta por lo que el bucle se ejecutará sólo 5 veces.
Si por el contrario consideramos el mismo bucle escrito en VB.NET (o, para el caso VB Clásico o VBScript):
Dim n As Integer = 10
Dim i As Integer
For i = 1 To n
Console.WriteLine(i.ToString())
n = n - 1
Next
el bucle se ejecutará 10 veces ya que este otro lenguaje almacena el valor inicial y lo compara en cada vuelta. Es una sutil diferencia pero que puede despistar a los programadores y dar lugar a algún "bug" que otro difícil de detectar.
José Manuel Alarcón Aguín
Fundador de
campusMVP.es, el
proyecto de referencia en formación on-line para programadores en lengua española.
Autor de varios libros y cientos de artículos. Galardonado como
MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la
tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.