Buscador

For...Next - III

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 141.

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 141

For...Next - II

El Código fuente 140 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 140

For...Next - I

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 139 muestra su sintaxis

For Contador = Inicio To Fin [Step Incremento]
' código
' ......
[Exit For]
' código
' ......
Next
Código fuente 139

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.

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 138, 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 138

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 136 muestra su sintaxis.

Do
' código
' ......
[Exit Do]
' código
' ......
Loop While | Until Expresión
Código fuente 136

El Código fuente 137 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")
Palabra = Console.ReadLine()
Loop Until Palabra = "coche"
End Sub
Código fuente 137

Condición al principio

La sintaxis se muestra en el Código fuente 134.

Do While | Until Expresión
' código
' ......
[Exit Do]
' código
' ......
Loop
Código fuente 134

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 135.

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")
Palabra = Console.ReadLine()
Loop
End Sub
Código fuente 135

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.

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 132.

While Expresión
' código
' .....
End While
Código fuente 132

Y a continuación, un ejemplo en el Código fuente 133.

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")
While Contador < Valor
Console.Write("-" & Contador)
Contador += 1
End While
Console.ReadLine()
End Sub
Código fuente 133

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 ocasiones en que se ejecuta el código contenido en estas estructuras se le denomina iteración.

Select Case...End Select - III

En el caso de que tras evaluar la expresión, haya más de un Case cuya lista de expresiones se cumpla, se ejecutará el que esté situado en primer lugar. En el ejemplo anterior, cuando la variable Valor contiene 5, se cumplen dos casos. Ver Código fuente 130.

Case 5
Console.WriteLine("El valor es 5")
' .....
' .....
Case Is < 10
Console.WriteLine("El valor es menor de 10")
Código fuente 130

Sin embargo sólo se ejecuta el código del primer Case.
Por otro lado, la lista de expresiones puede ser una combinación de los distintos formatos disponibles. Ver Código fuente 131.

Case 12 To 15, 4, 7, Is > 20
Código fuente 131

Select Case...End Select - II

Veamos a continuación, en el Código fuente 129 un ejemplo de uso de esta estructura.

Sub Main()
Dim Valor As Integer
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
Select Case Valor
Case 5
Console.WriteLine("El valor es 5")
Case 120, 250
Console.WriteLine("El valor es 120 ó 250")
Case 3000 To 4000
Console.WriteLine("El valor está en el rango de 3000 a 4000")
Case Is < 10
Console.WriteLine("El valor es menor de 10")
Case Else
Console.WriteLine("El valor es {0}, y no se cumple ningún caso", Valor)
End Select
Console.ReadLine()
End Sub
Código fuente 129

La función IIf( )

Esta función realiza básicamente el mismo trabajo que la estructura If...End If, pero a través de un uso distinto. El Código fuente 126 muestra su sintaxis.

IIf(Expresión, RetornoVerdadero, RetornoFalso)
Código fuente 126

La mecánica de funcionamiento de IIf( ) consiste en pasarle una expresión a evaluar en el primer parámetro. Si el resultado de dicha evaluación es Verdadero, se devolverá lo que hayamos situado en el parámetro RetornoVerdadero, mientras que si el resultado es Falso, se devolverá el parámetro RetornoFalso. El Código fuente 127 muestra un ejemplo de esta función.

Sub Main()
Dim Valor As Integer
Dim Resultado As String
Console.WriteLine("Introducir el valor a buscar")
Valor = Console.ReadLine() ' escribir un número
' comprobar el contenido de la variable
Resultado = IIf(Valor = 500, "Correcto", "No encontrado")
Console.WriteLine("El resultado de la búsqueda ha sido: {0}", Resultado)
Console.ReadLine()
End Sub
Código fuente 127

Decisión múltiple - II

A continuación vemos un ejemplo en el Código fuente 125.

Sub Main()
Dim Valor As Integer
Dim Resultado As Integer
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
If Valor = 5 Then
Resultado = Valor + 10
ElseIf Valor > 100 Then
Resultado = Valor + 200
ElseIf Valor < 1 Then
Resultado = -8
Else
Resultado = 777
End If
Console.WriteLine("La variable Resultado contiene {0}", Resultado)
Console.ReadLine()
End Sub
Código fuente 125
En esta situación, si la primera expresión es Verdadero, se ejecutará el código situado a partir de If. Sin embargo, si If devuelve Falso, se comprobarán sucesivamente las expresiones de cada uno de los ElseIf existentes. En el caso de algún ElseIf devuelva Verdadero, se ejecutará el código que haya a partir del mismo. Si ninguna de las anteriores situaciones se cumple, se ejecutará el código que haya a partir de Else en el caso de que este se haya definido.