JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Una diferencia importante entre los Bucles 'for' en C# y VB.NET

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
Banner

Agregar comentario