Вы находитесь на странице: 1из 8

BUCLES WHILE

Ejecuta una serie de instrucciones siempre que una condicin dada sea
True.
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continan ejecutndose hasta que la
variable index es superior a 10.
Dim index As Integer = 0
While index <= 10
Debug.Write(index.ToString & " ")
index += 1
End While
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
En el siguiente ejemplo se muestra el uso de las instrucciones Continue While y Exit While.
Dim index As Integer = 0
While index < 100000
index += 1
' If index is between 5 and 7, continue
' with the next iteration.
If index >= 5 And index <= 8 Then
Continue While
End If
' Display the index.
Debug.Write(index.ToString & " ")
' If index is 10, exit the loop.
If index = 10 Then
Exit While
End If
End While
Debug.WriteLine("")
' Output: 1 2 3 4 9 10

En el ejemplo siguiente se leen todas las lneas de un archivo de texto. El mtodo OpenText
abre el archivo y devuelve un StreamReader que lee los caracteres. En la condicin de
While , el mtodo de Peek de StreamReader determina si contiene caracteres adicionales.
Private Sub ShowText(ByVal textFilePath As String)
If System.IO.File.Exists(textFilePath) = False Then
Debug.WriteLine("File Not Found: " & textFilePath)
Else
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(textFilePath)
While sr.Peek() >= 0
Debug.WriteLine(sr.ReadLine())
End While
sr.Close()
End If
End Sub
BUCLES DO
Repite un bloque de instrucciones mientras una condicin Boolean sea
True o hasta que la condicin se convierta en True.
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continan ejecutndose hasta que la
variable index es superior a 10. La clusula Until est al final del bucle.
Dim index As Integer = 0
Do
Debug.Write(index.ToString & " ")
index += 1
Loop Until index > 10
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10

En el ejemplo siguiente se utiliza una clusula While en vez de una clusula Until, y se
prueba condition al inicio del bucle en lugar de al final.

Dim index As Integer = 0


Do While index <= 10
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10

En el siguiente ejemplo, condition detiene el bucle cuando la variable index es superior a


100. La instruccin If del bucle, sin embargo, hace que la instruccin Exit Do detenga el
bucle cuando la variable ndice es mayor de 10.
Dim index As Integer = 0
Do While index <= 100
If index > 10 Then
Exit Do
End If
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
En el ejemplo siguiente se leen todas las lneas de un archivo de texto. El mtodo OpenText
abre el archivo y devuelve un StreamReader que lee los caracteres. En la condicin
Do...Loop, el mtodo Peek de StreamReader determina si hay caracteres adicionales.
Private Sub ShowText(ByVal textFilePath As String)
If System.IO.File.Exists(textFilePath) = False Then
Debug.WriteLine("File Not Found: " & textFilePath)
Else
Dim sr As System.IO.StreamReader =
System.IO.File.OpenText(textFilePath)
Do While sr.Peek() >= 0
Debug.WriteLine(sr.ReadLine())
Loop
sr.Close()
End If
End Sub

BUCLES FOR
Repite un grupo de instrucciones un nmero de veces especificado.
Ejemplo
El ejemplo siguiente elimina todos los elementos de una lista genrica. En lugar de
Instruccin For Each...Next (Visual Basic), el ejemplo muestra una instruccin de For
Next que recorra en orden descendente. El ejemplo utiliza esta tcnica porque el mtodo de
removeAt hace elementos despus del elemento quitado para tener un valor de ndice
mnimo.
Dim lst As New List(Of Integer) From {10, 20, 30, 40}
For index As Integer = lst.Count - 1 To 0 Step -1
lst.RemoveAt(index)
Next
Debug.WriteLine(lst.Count.ToString)
' Output: 0
El ejemplo siguiente se recorre en iteracin una enumeracin que se declara mediante
Instruccin Enum (Visual Basic).
Public Enum Mammals
Buffalo
Gazelle
Mongoose
Rhinoceros
Whale
End Enum
Public Sub ListSomeMammals()
For mammal As Mammals = Mammals.Gazelle To
Mammals.Rhinoceros
Debug.Write(mammal.ToString & " ")
Next
Debug.WriteLine("")
' Output: Gazelle Mongoose Rhinoceros
End Sub
En el siguiente ejemplo, los parmetros de la instruccin utilizan una clase que tiene
sobrecargas de operador para los operadores +, -, >= y <=.

Private Class Distance


Public Property Number() As Double
Public Sub New(ByVal number As Double)
Me.Number = number
End Sub
' Define operator overloads to support For...Next
statements.
Public Shared Operator +(ByVal op1 As Distance, ByVal op2
As Distance) As Distance
Return New Distance(op1.Number + op2.Number)
End Operator
Public Shared Operator -(ByVal op1 As Distance, ByVal op2
As Distance) As Distance
Return New Distance(op1.Number - op2.Number)
End Operator
Public Shared Operator >=(ByVal op1 As Distance, ByVal
op2 As Distance) As Boolean
Return (op1.Number >= op2.Number)
End Operator
Public Shared Operator <=(ByVal op1 As Distance, ByVal
op2 As Distance) As Boolean
Return (op1.Number <= op2.Number)
End Operator
End Class
Public Sub ListDistances()
Dim distFrom As New Distance(10)
Dim distTo As New Distance(25)
Dim distStep As New Distance(4)
For dist As Distance = distFrom To distTo Step distStep
Debug.Write(dist.Number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 10 14 18 22
End Sub

BUCLES FOR EACH


Repite un grupo de instrucciones para cada elemento de una coleccin.
Ejemplo
El ejemplo siguiente muestra todas las carpetas del directorio C:\ utilizando la clase
DirectoryInfo .
Dim dInfo As New System.IO.DirectoryInfo("c:\")
For Each dir As System.IO.DirectoryInfo In
dInfo.GetDirectories()
Debug.WriteLine(dir.Name)
Next

El ejemplo siguiente muestra un procedimiento para ordenar una coleccin. El ejemplo


ordena las instancias de una clase de Car almacenados en List<T>. La clase Car
implementa la interfaz IComparable<T>, que requiere que el mtodo CompareTo se
implemente.
Cada llamada al mtodo de CompareTo crea una nica comparacin que se utiliza para
ordenar. El cdigo escrito por el usuario en el mtodo CompareTo devuelve un valor para
cada comparacin del objeto actual con otro objeto. El valor devuelto es menor que cero si
el objeto actual es menor que otro objeto, mayor que cero si el objeto actual es mayor que
otro objeto y cero si son iguales. Esto permite definir en el cdigo los criterios para la
evaluacin mayor que, menor que, e igual que.
En el mtodo ListCars, la expresin cars.Sort() ordena la lista. Esta llamada al mtodo Sort
de List<T> hace que el mtodo CompareTo sea llamado automticamente para los objetos
de clase Car en List.
Public Sub ListCars()
' Create some new cars.
Dim cars As New List(Of
{
New Car With {.Name
= 20},
New Car With {.Name
= 50},
New Car With {.Name
.Speed = 10},
New Car With {.Name
= 50},

Car) From
= "car1", .Color = "blue", .Speed
= "car2", .Color = "red", .Speed
= "car3", .Color = "green",
= "car4", .Color = "blue", .Speed

New Car With {.Name = "car5", .Color = "blue", .Speed


= 30},
New Car With {.Name = "car6", .Color = "red", .Speed
= 60},
New Car With {.Name = "car7", .Color = "green",
.Speed = 50}
}
' Sort the cars by color alphabetically, and then by
speed
' in descending order.
cars.Sort()
' View all of the cars.
For Each thisCar As Car In cars
Debug.Write(thisCar.Color.PadRight(5) & " ")
Debug.Write(thisCar.Speed.ToString & " ")
Debug.Write(thisCar.Name)
Debug.WriteLine("")
Next
' Output:
' blue 50
' blue 30
' blue 20
' green 50
' green 10
' red
60
' red
50
End Sub

car4
car5
car1
car7
car3
car6
car2

Public Class Car


Implements IComparable(Of Car)
Public Property Name As String
Public Property Speed As Integer
Public Property Color As String
Public Function CompareTo(ByVal other As Car) As Integer
_
Implements System.IComparable(Of Car).CompareTo
' A call to this method makes a single comparison
that is
' used for sorting.
' Determine the relative order of the objects being
compared.

' Sort by color alphabetically, and then by speed in


' descending order.
' Compare the colors.
Dim compare As Integer
compare = String.Compare(Me.Color, other.Color, True)
' If the colors are the same, compare the speeds.
If compare = 0 Then
compare = Me.Speed.CompareTo(other.Speed)
' Use descending order for speed.
compare = -compare
End If
Return compare
End Function
End Class