RSS 2.0 Atom 1.0 CDF  
JASoft.org - Una diferencia importante entre los Bucles 'for' en C# y VB.NET
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

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.

Friday, February 18, 2005 6:36:00 PM (Hora estándar romance, UTC+01:00)  #    Comments [0]   Programación  |  Trackback
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.