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.

Decisión múltiple - I

En el caso de que la expresión principal a evaluar devuelva Faso, podemos agregar expresiones adicionales utilizando la palabra clave ElseIf, con su bloque de código respectivo. En el caso de que ninguna de ellas se cumplan, podemos incluir un Else, para ejecutar un bloque de código por defecto. Veamos la sintaxis en el Código fuente 124.

If ExpresiónA Then
' código cuando ExpresiónA es Verdadero
' .......
ElseIf ExpresiónB Then
' código cuando ExpresiónB es Verdadero
' .......
[ElseIf ExpresiónN Then]
' código cuando ExpresiónN es Verdadero
' .......
[Else]
' código cuando ninguna epxresión devuelve Verdadero
' .......
End If
Código fuente 124

Decisión doble en una línea

Al igual que ocurre con la decisión simple, si para cada resultado de la expresión, sólo necesitamos ejecutar una instrucción, podemos escribir todo el código en una sola línea. Veamos la sintaxis en el Código fuente 122.

If Expresión Then InstrucciónVerdadero Else InstrucciónFalso

Código fuente 122

En el Código fuente 123 tenemos un ejemplo de uso.

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 Else Resultado = 777
Console.WriteLine("La variable resultado contiene {0}", Resultado)
Console.ReadLine()
End Sub
Código fuente 123

Si bien la ejecución de la estructura If en una línea puede ser útil en ocasiones, tiene como contrapartida el que nuestro código sea más difícil de leer. Por ello es más recomendable el uso de esta estructura de control en su formato If...End If.

Decisión doble - II

Veamos un ejemplo en el Código fuente 121.

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
Else
Resultado = 777
End If
Console.WriteLine("La variable resultado contiene {0}", Resultado)
Console.ReadLine()
End Sub
Código fuente 121

En este ejemplo, cuando Valor contenga 5 se ejecutará el bloque de código que hay a continuación de If, pero cuando Valor contenga un número distinto, se ejecutará el código que hay a continuación de Else. La ejecución en cualquier caso, continuará después a partir de la siguiente línea que haya a partir de la palabra clave End If.

Decisión doble - I

Además de ejecutar un bloque de código cuando la expresión valga Verdadero, podemos también ejecutar código cuando la expresión devuelva Falso. En este caso añadiremos a la estructura la palabra clave Else, como muestra la sintaxis del Código fuente 120.

If Expresión Then
' código cuando Expresión es Verdadero
' ......
' ......
Else
' código cuando Expresión es Falso
' ......
' ......
End If
Código fuente 120

Decisión simple en una línea

En el caso de que sólo haya que ejecutar una instrucción sencilla cuando se cumple la expresión de la estructura, podemos omitir la palabra clave End If, escribiendo la sentencia a ejecutar en la misma línea de la declaración de la estructura If, justo a continuación de la palabra Then. La sintaxis en este caso, se simplifica, como muestra el Código fuente 118.

If Expresión Then Instrucción
Código fuente 118

Veamos un ejemplo en el Código fuente 119.

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
Console.WriteLine("La variable resultado contiene {0}", Resultado)
Console.ReadLine()
End Sub
Código fuente 119

Como habrá comprobado el lector, la sentencia que hay a continuación de Then sólo se ejecutará cuando la variable Valor contenga 5.

Decisión simple - IV

Situémonos ahora en el caso contrario: ¿cómo conseguir que se ejecute el código contenido dentro de la estructura de control cuando la expresión a evaluar devuelva Falso?. En esta situación disponemos igualmente de dos formas de hacer las cosas, el uso de una u otra dependerá de los gustos del programador. Podemos indicar explícitamente que se ejecute la estructura cuando el valor devuelto sea False, o bien utilizar el operador Not. Las dos estructuras If...End If del Código fuente 117 producirían el mismo resultado.

If Not (Valor = 5) Then
Console.WriteLine("El contenido de la variable es diferente de 5")
End If
If (Valor = 5) = False Then
Console.WriteLine("El contenido de la variable es diferente de 5")
End If
Código fuente 117

Decisión simple - III

Como habrá podido comprobar el lector, no es necesario especificar en la expresión que el resultado de la misma sea Verdadero para poder ejecutar el código de la estructura de control. Las dos formas de escribir la expresión del Código fuente 116 son equivalentes; mientras la primera es más simple e igualmente comprensible, con la segunda somos lo más explícitos posibles en nuestro código, esto es algo que ya queda en el estilo de codificación de cada programador, puesto que el resultado será equivalente en ambos casos.

If Valor = 5 Then
'....
If (Valor = 5) = True Then
'....
Código fuente 116

Decisión simple - II

Si al evaluar Expresión se devuelve como resultado Verdadero, se ejecutarán las líneas o bloque de código comprendido entre If y End If. Si Expresión es Falso, se desviará la ejecución a la primera línea de código que haya después de End If. Veamos un ejemplo en el Código fuente 115.

Sub Main()
Dim Valor As Integer
Console.WriteLine("Introducir un número")
Valor = Console.ReadLine()
If Valor = 5 Then
Console.WriteLine("Estamos dentro de la estructura If," & _
" ya que su expresión devuelve Verdadero")
End If
Console.ReadLine()
End Sub


Código fuente 115

Decisión simple - I

La sintaxis de decisión simple se muestra en el Código fuente 114.


If Expresión Then
' código
' ......
' ......
End If
Código fuente 114

If...End If

La sintaxis de esta estructura puede aplicarse de diferentes formas en función del tipo de decisión a resolver.

Estructuras de control

Las estructuras de control junto a los procedimientos, componen los dos elementos que sientan las bases de la programación estructurada. Las estructuras de control contienen bloques de código que serán ejecutados en función del resultado obtenido al evaluar una expresión asociada a la estructura. A este proceso de redirección del flujo del programa hacia un determinado bloque de código se le denomina bifurcación Según el modo de ejecución del código que contienen, las estructuras de control se dividen en los siguientes tipos: selección y repetición. 

Selección Las estructuras de selección o decisión permiten ejecutar un bloque de código entre varios disponibles, según el resultado de la evaluación de una expresión situada en la cabecera de la estructura.

Lista desplegable “Nombre de método”, en el editor de código

La lista desplegable Nombre de método, situada en la parte superior derecha del editor de código, tiene dos finalidades principales que describimos a continuación. 
• Mostrar el nombre del procedimiento sobre el que actualmente trabajamos. Esta información es útil sobre todo en procedimientos con muchas líneas de código, en las que no tenemos en todo momento visible la declaración del procedimiento. 
• Cambiar a otro procedimiento del módulo de código. Abriendo la lista desplegable, y haciendo clic en alguno de los nombres de procedimientos que se muestran, no situaremos al comienzo de dicho procedimiento. Este es un medio más rápido para desplazarnos entre los procedimientos que tener que recorrer toda la ventana del editor de código. En el ejemplo de la Figura 69, estamos situados en el procedimiento Main( ), y al abrir esta lista de procedimientos, podemos cambiar fácilmente a cualquier otro de los que hemos creado.
Figura 69. Lista Nombre de método, en el editor de código del IDE.

Sobrecarga de procedimientos - V

En este código hemos creado tres versiones sobrecargadas del procedimiento VerEmpleado( ). En una mostramos los datos del empleado según el nombre; en otra también mostramos otro conjunto de datos según la edad y además, al ser una función, devolvemos el número de días libres del empleado; finalmente en una tercera implementación, calculamos el salario según el precio por hora y las horas trabajadas, que pasamos al protocolo de llamada. Desde Main( ) por lo tanto, siempre llamamos al procedimiento VerEmpleado( ).