Páginas: [1]
|
 |
|
Autor
|
Tema: NekroAyuda: Introducción a las estructuras de control en VB. (Leído 734 veces)
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
Textos extraidos de las Librerías de Microsoft Developer NetWork Introducción a las estructuras de control Las estructuras de control le permiten controlar el flujo de ejecución del programa. Si no se controla mediante instrucciones de control de flujo, la lógica del programa fluirá por las instrucciones de izquierda a derecha y de arriba a abajo. Aunque se pueden escribir algunos programas sencillos con un flujo unidireccional y aunque se puede controlar parte del flujo mediante operadores para regular la precedencia de las operaciones, la mayor parte del poder y utilidad de un lenguaje de programación deriva de su capacidad de cambiar el orden de las instrucciones mediante estructuras y bucles. Para saber más acerca de estructuras de control específicas, vea los temas siguientes: - Estructuras de decisión Introducción a las estructuras de decisión utilizadas para bifurcar.
- Estructuras de bucle Introducción a las estructuras de bucle utilizadas para repetir procesos.
- Trabajar con estructuras de control Conceptos básicos del trabajo con estructuras de control en el código.
Estructuras de decisiónLos procedimientos de Visual Basic pueden probar condiciones y, dependiendo de los resultados de la prueba, realizar diferentes operaciones. Entre las estructuras de decisión que acepta Visual Basic se incluyen las siguientes: - If...Then
- If...Then...Else
- Select Case
Estructuras de bucleLas estructuras de bucle le permiten ejecutar una o más líneas de código repetidamente. Las estructuras de bucle que acepta Visual Basic son: - Do...Loop
- For...Next
- For Each...Next
Ahora veamos en qué consiste cada una de estas estructuras.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
If...Then...Else (Instrucción) Ejecuta condicionalmente un grupo de instrucciones, dependiendo del valor de una expresión. SintaxisIf condición Then [ instrucciones]-[ Else instrucciones_else] Puede utilizar la siguiente sintaxis en formato de bloque: If condición Then[ instrucciones] [ ElseIf condición-n Then[ instrucciones_elseif]... [ Else[ instrucciones_else]] End IfLa sintaxis de la instrucción If...Then...Else consta de tres partes: | Parte | Descripción | | condición | Requerido. Uno o más de los siguientes dos tipos de expresiones: | | Una expresión numérica o expresión de cadena que puede ser evaluada como True o False. Si condición es Null, condición se considera False. | | Una expresión del formulario TypeOf nombre_objeto Is tipo_objeto. El nombre_objeto es cualquier referencia al objeto y tipo_objeto es cualquier tipo de objeto válido. La expresión es True si nombre_objeto es del tipo de objeto especificado por tipo_objeto; en caso contrario es False. | | instrucciones | Opcional en formato de bloque; se requiere en formato de línea sencilla que no tenga una cláusula Else. Una o más instrucciones separadas por dos puntos ejecutados si la condición es True. | | condición-n | Opcional. Igual que condición. | | instrucciones_elseif | Opcional. Una o más instrucciones ejecutadas si la condición-n asociada es True. | | instrucciones_else | Opcional. Una o más instrucciones ejecutadas si ninguna de las expresiones anteriores condición o condición-n es True. | ComentariosPuede utilizar la forma de una sola línea (Sintaxis 1) para pruebas cortas y sencillas. Sin embargo, el formato de bloque (Sintaxis 2) proporciona más estructura y flexibilidad que la forma de línea simple y, generalmente, es más fácil de leer, de mantener y de depurar. Nota Con la sintaxis es posible ejecutar múltiples instrucciones como resultado de una decisión If...Then, pero todas deben estar en la misma línea y separadas por dos puntos, como en la instrucción siguiente: If A > 10 Then A = A + 1 : B = B + A : C = C + B Una instrucción con formato de bloque If debe ser la primera de la línea. Las partes Else, ElseIf y End If, de la instrucción, solamente pueden ir precedidas de un número de línea o una etiqueta de línea. El bloque If debe terminar con una instrucción End If. Para determinar si una instrucción If es un bloque, examine lo que sigue a la palabra Then. Si lo que aparece detrás de Then en la misma línea no es un comentario, la instrucción se considera como una instrucción If de una sola línea. Las cláusulas Else y ElseIf son opcionales. Puede tener en un bloque ElseIf, tantas cláusulas If como desee, pero ninguna puede aparecer después de una cláusula Else. Las instrucciones de bloque If se pueden anidar; es decir, unas pueden contener a otras. Cuando se ejecuta un bloque If (Sintaxis 2), se prueba condición. Si condición es True, se ejecutan las instrucciones que están a continuación de Then. Si condición es False, se evalúan una a una las condiciones ElseIf (si existen). Cuando se encuentra una condición True se ejecutan las instrucciones que siguen inmediatamente a la instrucción Then asociada. Si ninguna de las condiciones ElseIf es True (o si no hay cláusulas ElseIf), se ejecutan las instrucciones que siguen a Else. Después de la ejecución de las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción que sigue a End If. Sugerencia Select Case puede ser más útil cuando se evalúa una única expresión que tiene varias acciones posibles. Sin embargo, la cláusula TypeOf nombre_objeto Is tipo_objeto no se puede utilizar en una instrucción Select Case. Nota No se puede usar TypeOf con tipos de datos predefinidos como Long, Integer y así sucesivamente, excepto en el tipo de datos Object.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
Select Case (Instrucción) Ejecuta uno de varios grupos de instrucciones, dependiendo del valor de una expresión. SintaxisSelect Case expresión_prueba[ Case lista_expresion-n[ instrucciones-n]]... [ Case Else[ instrucciones_else]] End SelectLa sintaxis de la instrucción Select Case consta de las siguientes partes: | Parte | Descripción | | expresión_prueba | Requerido. Cualquier expresión numérica o expresión de cadena. | | lista_expresión-n | Requerido si aparece la palabra clave Case. Lista delimitada por comas de una o más de las formas siguientes: expresión, expresión To expresión, Is expresión operador_de_comparación. La palabra clave especifica un intervalo de valores. Si se utiliza la palabra clave To, el valor menor debe aparecer antes de To. Utilice la palabra clave Is con operadores de comparación (excepto Is y Like) para especificar un intervalo de valores. Si no se escribe, la palabra clave Is se insertará automáticamente. | | instrucciones-n | Opcional. Una o más instrucciones ejecutadas si expresión_prueba coincide con cualquier parte de lista_expresión-n. | instrucciones_ else | Opcional. Una o más instrucciones que se ejecuten si expresión_prueba no coincide con nada de la cláusula Case. | ComentariosSi expresión_prueba coincide con cualquier lista_expresión asociada con una cláusula Case, las instrucciones que siguen a esa cláusula Case se ejecutan hasta la siguiente cláusula Case o, para la última cláusula, hasta la instrucción End Select. El control pasa después a la instrucción que sigue a End Select. Si expresión_prueba coincide con una expresión de lista_expresión en más de una cláusula Case, sólo se ejecutan las instrucciones que siguen a la primera coincidencia. La cláusula Case Else se utiliza para indicar las instrucciones que se van a ejecutar si no se encuentran coincidencias entre expresión_prueba y una lista_expresión en cualquiera de las otras selecciones de Case. Aunque no es necesario, es buena idea tener una instrucción Case Else en el bloque Select Case para controlar valores imprevistos de expresión_prueba. Cuando no hay una instrucción Case Else y ninguna expresión de la lista en las cláusulas Case coincide con la expresión de prueba, la ejecución continúa en la instrucción que sigue a End Select. Se pueden utilizar expresiones múltiples o intervalos en cada cláusula Case. Por ejemplo, la línea siguiente es válida: Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber Nota El operador de comparación Is no es lo mismo que la palabra clave Is utilizada en la instrucción Select Case. También puede especificar intervalos y expresiones múltiples para cadenas de caracteres. En el siguiente ejemplo, Case coincide con las cadenas que son exactamente iguales a todo, cadenas que están entre "nueces" y "sopa" en orden alfabético y el valor actual de "ElemPrueba": Case "iguales a todo", "nueces" To "sopa", ElemPrueba Las instrucciones Select Case se pueden anidar. Cada instrucción Select Case debe tener su correspondiente instrucción End Select.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
 |
Do... Lop
« Respuesta #3 en: 21 Marzo 2005, 18:15 » |
|
Do...Loop Instrucción) Repite un bloque de instrucciones cuando una condición es True o hasta que una condición se convierta en True. SintaxisDo [{ While | Until} condición] [ instrucciones] [ Exit Do] [ instrucciones] LoopO bien, puede utilizar esta sintaxis: Do[ instrucciones] [ Exit Do] [ instrucciones] Loop [{ While | Until} condición] La sintaxis de la instrucción Do Loop consta de las siguientes partes: | Parte | Descripción | | condición | Opcional. Expresión numérica o expresión de cadena que es True o False. Si la condición es Null, condición se considera False. | | Instrucciones | Una o más instrucciones que se repiten mientras o hasta que condición sea True. | ComentariosSe puede utilizar cualquier número de instrucciones Exit Do ubicadas en cualquier lugar dentro de una estructura de control Do…Loop, para proporcionar una salida alternativa de un Do…Loop. La instrucción Exit Do se utiliza frecuentemente en la evaluación de alguna condición, por ejemplo, If…Then; en este caso, la instrucción Exit Do transfiere el control a la instrucción que sigue inmediatamente a la instrucción Loop. Cuando se utiliza con instrucciones anidadas Do…Loop, la instrucción Exit Do transfiere control al bucle que está anidado un nivel por encima del bucle donde ocurre.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
For...Next (Instrucción) Repite un grupo de instrucciones un número especificado de veces. SintaxisFor contador = principio To fin [ Step incremento] [ instrucciones] [ Exit For] [ instrucciones] Next [ contador] La sintaxis de la instrucción For...Next consta de las siguientes partes: | Parte | Descripción | | contador | Requerido. Variable numérica que se utiliza como contador de bucle. La variable no puede ser Booleana ni un elemento de matriz. | | principiot | Requerido. Valor inicial del contador. | | fin | Requerido. Valor final del contador. | | incremento | Opcional. Cantidad en la que cambia el contador cada vez que se ejecuta el bucle. Si no se especifica, el valor predeterminado de incremento es uno. | | instrucciones | Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces. | ComentariosEl argumento incremento puede ser positivo o negativo. El valor del argumento incremento determina la manera en que se procesa el bucle, como se muestra a continuación: | Valor | El bucle se ejcuta si | | Positivo o 0 | contador <= fin | | Negativo | contador >= fin |
Una vez que se inicia el bucle y se han ejecutado todas las instrucciones en el bucle, incremento se suma a contador. En este punto, las instrucciones del bucle se pueden ejecutar de nuevo (si se cumple la misma prueba que causó que el bucle se ejecutara inicialmente) o bien se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next. Sugerencia Cambiar el valor de contador mientras está dentro de un bucle hace difícil su lectura y depuración. Se pueden colocar en el bucle cualquier número de instrucciones Exit For como una manera alternativa de salir del mismo. La instrucción Exit For, que se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then), transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next. Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro. Para ello, proporcione a cada bucle un nombre de variable único como su contador. La siguiente construcción es correcta: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next I
Nota Si omite un contador en una instrucción Next, la ejecución continúa como si se hubiera incluido. Se produce un error si se encuentra una instrucción Next antes de su instrucción For correspondiente.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
For Each...Next (Instrucción) Repite un grupo de instrucciones para cada elemento de una matriz o colección. SintaxisFor Each elemento In grupo[ instrucciones] [ Exit For] [ instrucciones] Next [ elemento] La sintaxis de la instrucción For Each...Next consta de las siguientes partes: | Parte | Descripción | | elemento | Requerido. Variable que se utiliza para iterar por los elementos del conjunto o matriz. Para conjuntos, elemento solamente puede ser una variable del tipo Variant, una variable de objeto genérica o cualquier variable de objeto específica. Para matrices, elemento solamente puede ser una variable tipo Variant. | | grupo | Requerido. Nombre de un conjunto de objetos o de una matriz (excepto una matriz de tipos definidos por el usuario). | | instrucciones | Opcional. Una o más instrucciones que se ejecutan para cada elemento de un grupo. | ComentariosLa entrada al bloque For Each se produce si hay al menos un elemento en grupo. Una vez que se ha entrado en el bucle, todas las instrucciones en el bucle se ejecutan para el primer elemento en grupo. Después, mientras haya más elementos en grupo, las instrucciones en el bucle continúan ejecutándose para cada elemento. Cuando no hay más elementos en el grupo, se sale del bucle y la ejecución continúa con la instrucción que sigue a la instrucción Next. Se pueden colocar en el bucle cualquier número de instrucciones Exit For. La instrucción Exit For se utiliza a menudo en la evaluación de alguna condición (por ejemplo, If...Then) y transfiere el control a la instrucción que sigue inmediatamente a la instrucción Next. Puede anidar bucles For Each...Next, colocando un bucle For Each...Next dentro de otro. Sin embargo, cada elemento del bucle debe ser único. Nota Si omite elemento en una instrucción Next, la ejecución continúa como si se hubiera incluido. Si se encuentra una instrucción Next antes de su instrucción For correspondiente, se producirá un error. No se puede utilizar la instrucción For Each...Next con una matriz de tipos definidos por el usuario porque un tipo Variant no puede contener un tipo definido por el usuario.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
Trabajar con estructuras de control Estructuras de control anidadasPuede colocar estructuras de control dentro de otras estructuras de control (como un bloque If...Then dentro de un bucle For...Next). Se dice que una estructura de control colocada dentro de otra estructura de control está anidada. Puede anidar las estructuras de control en Visual Basic en tantos niveles como desee. Es una práctica común crear estructuras de decisión anidadas y estructuras de bucle más legibles sangrando el cuerpo de la estructura de decisión o de bucle. Por ejemplo, este procedimiento imprime todos los nombres de fuentes comunes de la impresora y de la pantalla: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print SFont End If Next PFont Next SFont End Sub
Observe que el primer Next cierra el bucle For interior y que el último For cierra el bucle For exterior. Del mismo modo, en instrucciones If anidadas, las instrucciones End If se aplican automáticamente a la anterior instrucción If más cercana. Las estructuras Do...Loop anidadas funcionan de una forma parecida; la instrucción Loop más interior coincide con la instrucción Do más interior. Salir de una estructura de controlLa instrucción Exit le permite salir directamente de un bucle For, un bucle Do, un procedimiento Sub o un procedimiento Function. La sintaxis de la instrucción Exit es sencilla: Exit For puede aparecer tantas veces como sea necesario dentro de un bucle For y Exit Do puede aparecer tantas veces como sea necesario dentro de un bucle Do: For contador = iniciar To finalizar [ Step incremento] [ bloque de instrucciones] [ Exit For] [ bloque de instrucciones] Next [ contador[, contador] [,...]] Do [{ While | Until} condición] [ bloque de instrucciones] [ Exit Do] [ bloque de instrucciones] LoopLa instrucción Exit Do funciona con todas las variantes de la sintaxis del bucle Do. Exit For y Exit Do son muy útiles ya que, algunas veces, resulta apropiado salir inmediatamente de un bucle sin realizar más iteraciones o instrucciones dentro del bucle. Por ejemplo, en el ejemplo anterior que imprimía las fuentes comunes de la impresora y de la pantalla, el código sigue comparando las fuentes de impresora contra una fuente de pantalla aunque se haya encontrado una coincidencia con una fuente de impresora anterior. Una versión más eficiente de la función saldría del bucle tan pronto como se encontrara una coincidencia: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit For ' Sale del bucle interior. End If Next PFont Next SFont End Sub
Como muestra este ejemplo, la instrucción Exit aparece varias veces dentro de una instrucción If o una instrucción Select Case anidada en el bucle. Cuando utilice la instrucción Exit para salir de un bucle, el valor de la variable contador difiere, dependiendo de cómo haya salido del bucle: - Cuando termina un bucle, la variable contador contiene el valor del límite superior más el paso.
- Cuando sale de un bucle prematuramente, la variable contador conserva su valor según las reglas usuales del alcance.
- Cuando sale antes del final de una colección, la variable contador contiene Nothing si se trata de un tipo de dato Object y Empty si es un tipo de dato Variant.
Salir de un procedimiento Sub o FunctionTambién puede salir de un procedimiento desde una estructura de control. La sintaxis de Exit Sub y Exit Function es similar a la de Exit For y Exit Do de la sección anterior, "Salir de una estructura de control". Exit Sub puede aparecer tantas veces como sea necesario, en cualquier parte del cuerpo de un procedimiento Sub. Exit Function puede aparecer tantas veces como se necesite, en cualquier parte del cuerpo de un procedimiento Function. Exit Sub y Exit Function son muy útiles cuando el procedimiento ha realizado todo lo que tenía que hacer y se quiere volver inmediatamente. Por ejemplo, si desea modificar el ejemplo anterior para que imprima sólo la primera fuente común de impresora y de pantalla que encuentre, podría usar Exit Sub: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit Sub ' Sale del procedimiento. End If Next PFont Next SFont End Sub
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
NekroByte
Desconectado
Mensajes: 636
NekroByte++
|
Textos Extraidos de las Librerías de Microsoft Developer NetWork.
Dudas, comentarios, aclaraciones y consultas en otro hilo, en otro tema, en otra publicación, en otro post.
Hilsener.
|
|
|
|
|
En línea
|
-- - -^[NekroByte]^- - --
|
|
|
|
Páginas: [1]
|
|
|
|