You are on page 1of 5

Repetición

Estas estructuras, también denominadas bucles, ejecutan un bloque de código de forma repetitiva
mientras se cumpla una condición asociada a la estructura. A cada una de las veces en que se
ejecuta el código contenido en estas estructuras se le denomina iteración.

While...End While
Se trata del tipo más sencillo, ejecuta las líneas de código que contiene, mientras que la expresión
situada junto a While devuelva Verdadero. Veamos su sintaxis en el Código fuente 149.

While Expresión
' código
' .....
End While
Código fuente 149
Y a continuación, un ejemplo en el Código fuente 150.
Sub Main()
Dim Valor As Integer
Dim Contador As Integer
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
Console.WriteLine("Mostrar en consola todos los números desde 1 hasta el
introducido")
Programación con Visual Basic .NET © Grupo EIDOS
260
While Contador < Valor
Console.Write("-" & Contador)
Contador += 1
End While
Console.ReadLine()
End Sub
Código fuente 150

Do...Loop
Esta estructura ejecuta un conjunto de líneas de código, en función del valor devuelto por una
expresión, que a modo de condición, podemos situar al comienzo o final de la estructura.
Es posible además, no utilizar la expresión de evaluación al principio o final, debiendo en ese caso,
introducir alguna condición en el interior del código de la estructura, para forzar la salida del bucle
y evitar caer en un bucle infinito. La instrucción Exit Do nos permite forzar la salida del bucle,
pudiendo emplearla tantas veces como sea necesario. Veamos a continuación, las diferentes
variantes disponibles.

Condición al principio.
La sintaxis se muestra en el Código fuente 151.

Do While | Until Expresión


' código
' ......
[Exit Do]
' código
' ......
Loop
Código fuente 151
La diferencia entre usar While o Until reside en que empleando While, el código del bucle se
ejecutará mientras la expresión devuelva Verdadero. En el caso de Until, el código se ejecutará
mientras que la expresión devuelva Falso. Veamos los ejemplos del Código fuente 152.

Sub Main()
Dim Valor As Integer
Dim Palabra As String
Dim Contador As Integer
Dim Pruebas As Integer
' bucle con While
Do While Valor <> 200
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
Loop
' bucle con Until
Do Until Palabra = "coche"
Console.WriteLine("Introducir una palabra")
© Grupo EIDOS 15. Bifurcación y ámbito del código
261
Palabra = Console.ReadLine()
Loop
' inicializar contador,
' en este caso vamos a pedir también
' al usuario que introduzca un número,
' pero si después de cinco intentos,
' no consigue acertar, forzamos la salida
' de la estructura
Contador = 1
Do While Pruebas <> 200
Console.WriteLine("Introducir un número - Intento nro.{0}", Contador)
Pruebas = Console.ReadLine()
If Contador = 5 Then
Exit Do
Else
Contador += 1
End If
Loop
End Sub
Código fuente 152

En el último caso de este ejemplo, podemos observar como empleamos además, la anidación de
diferentes estructuras, combinándolas para realizar las comprobaciones oportunas.

Condición al final.
La diferencia en este caso, consiste en que el contenido de la estructura se ejecuta al menos una vez.
El Código fuente 153 muestra su sintaxis.

Do
' código
' ......
[Exit Do]
' código
' ......
Loop While | Until Expresión
Código fuente 153
El Código fuente 154 muestra algunos ejemplos.
Sub Main()
Dim Valor As Integer
Dim Palabra As String
' bucle con While
Do
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
Loop While Valor <> 200
' bucle con Until
Do
Console.WriteLine("Introducir una palabra")
Programación con Visual Basic .NET © Grupo EIDOS
262
Palabra = Console.ReadLine()
Loop Until Palabra = "coche"
End Sub
Código fuente 154

Sin condición.
Este es el modo más sencillo de la estructura: sin incluir condición al principio o final. También es
el modo más peligroso, ya que si no incluimos un control dentro del código, corremos el riesgo de
caer en un bucle infinito. En el ejemplo del Código fuente 155, establecemos una condición de
salida mediante una estructura If dentro del bucle, que comprueba el contenido de la variable, y
fuerza la salida cuando tenga un valor superior a cierto número.

Sub Main()
Dim Valor As Integer
Do
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
' comprobar y salir del bucle si es necesario
If Valor > 400 Then
Exit Do
End If
Loop
End Sub
Código fuente 155

For...Next
Esta estructura ejecuta un bloque de código un número determinado de veces, establecido por un
rango de valores y controlado por un contador. El Código fuente 156 muestra su sintaxis

For Contador = Inicio To Fin [Step Incremento]


' código
' ......
[Exit For]
' código
' ......
Next
Código fuente 156

El elemento Contador se inicializa con un valor y el código existente entre For y Next es ejecutado
una serie de veces, hasta que el valor de Contador se iguala a Fin.
Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este aspecto utilizando
el modificador Step, mediante el que podemos establecer el número en el que se van a realizar los
incrementos. Step también nos permite realizar decremento utilizando un número negativo.
Si queremos realizar una salida de la ejecución de esta estructura antes de haber completado el
número de iteraciones establecidas, podemos utilizar la instrucción Exit For, que provocará dicha
salida de igual modo que el explicado anteriormente en la estructura Do...Loop. El Código fuente
157 muestra diferentes ejemplos de uso de este tipo de bucle.

Sub Main()
Dim Contador As Integer
Dim Final As Integer
' recorrido simple del bucle
Console.WriteLine("Bucle For normal")
For Contador = 1 To 10
Console.WriteLine("Variable Contador: {0}", Contador)
Next
Console.WriteLine()
' recorrer el bucle especificando un incremento
Console.WriteLine("Bucle For con incremento")
Console.WriteLine("Introducir el número de ejecuciones para el bucle")
Final = Console.ReadLine()
For Contador = 1 To Final Step 4
Console.WriteLine("Variable Contador: {0}", Contador)
Next
Console.WriteLine()
' recorrer el bucle especificando un decremento
Console.WriteLine("Bucle For con decremento")
For Contador = 18 To 4 Step -1
Console.WriteLine("Variable Contador: {0}", Contador)
Next
Console.WriteLine()
' este bucle no se ejecutará,
' al ser mayor el valor de contador
' que el valor final, y no haber
' establecido un decremento
For Contador = 18 To 4
Console.WriteLine("Variable Contador: {0}", Contador)
Next
' recorrer el bucle y salir antes de completar
' todas las iteraciones
Console.WriteLine("Bucle For con salida antes de completar")
For Contador = 1 To 10
Console.WriteLine("Variable Contador: {0}", Contador)
If Contador = 7 Then
Exit For
End If
Next
Console.ReadLine()
End Sub
Código fuente 157

Un truco para optimizar y acelerar la ejecución en un bucle de este tipo, consiste en utilizar como
contador una variable de tipo Integer, en vez de una de tipo Short, Long, Decimal, etc. Esto es
debido a que los tipos Integer se actualizan más rápidamente que los otros tipos numéricos, aunque
la diferencia sólo será apreciable en bucles que ejecuten muchos miles de iteraciones y que
contengan muchas instrucciones.
Ver Código fuente 158.
Dim ContRapido As Integer
Dim ContLento As Decimal
' este bucle se ejecutará más rápido que el siguiente
For ContRapido = 1 To 10000
' código
Next
For ContLento = 1 To 10000
' código
Next
Código fuente 158

For Each...Next
Se trata de una variante de la estructura For...Next, y su misión consiste en ejecutar un bloque de
código por cada uno de los elementos existentes en un array o colección. El Código fuente 159
muestra su sintaxis.

For Each Elemento In ColecArray


' código
' ......
[Exit For]
' código
' ......
Next
Código fuente 159

El Código fuente 160 muestra un ejemplo del uso de esta estructura de control.
Sub Main()
' crear un array y rellenarlo con valores
Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"}
Dim lsColor As String
' en cada iteración se obtiene un elemento
' del array lsColores, y se guarda en la variable lsColor
For Each lsColor In lsColores
Console.WriteLine(lsColor)
Next
End Sub
Código fuente 160
© Grupo EIDOS 15. Bifurcación y ámbito del código

You might also like