sábado, 17 de noviembre de 2007

SENTENCIAS Y VARIABLES DE CONTROL DEL VISUAL BASIC




LAS SENTECIAS DE CONTROL


son vitales para la construcción de un programa eficiente ya que permiten controlar el flujo del programa. Todas las decisiones se toman a través de este tipo de estructuras. Hay dos tipos de sentencias de control: sentencias condicionales y bucles. Las sentencias condicionales toman decisiones en base a o más una comparaciones lógicas y los bucles repiten una serie de sentencias mientras o hasta que se cumpla la condicón lógica. Antes de continuar es necesario definir las comparaciones lógicas y los nexos de comparaciones. Definición Comparador Igual Igual (para texto) Distinto Mayor Menor Mayor o igual Menor o igual Negación = Like <> > < >= <= Not Los comparadores lógicos son los que se muestran en la tabla siguiente y sirven de base para las sentencias codicionales y los bucles. Se debe tomar en cuenta que las comparaciones devuelven dos posibles resultados: True (Verdadero) o False (Falso). Entonces, como ejemplo, una serie de comparaciones y el valor devuelto: 45 = 60 False 45 <>60 False 45 <= 60 True También hay nexos que unen comparaciones para devolver un resultado de True o False en base a los resultados True o False de cada comparación; son los siguientes: § Or: este comparador devuelve True si alguna de las comparaciones devuelve True. § And: devuelve True si todas las comparaciones devuelven True. § Xor: devuelve True si una comparación devuelve True y la otra False. § Eqv: devuelve True si ambas comparaciones devuelven True o False. § Imp: devuelve True en todos los casos, excepto en el caso de que la primera comparación sea True y la segunda False. Estas sentencias se pueden anidar, o sea, que una de las evaluaciones o bucles se puede incluir dentro de otra. Ahora se verán cada una de las sentencias de control y bucles antes mencionados.



If … Then … Else … End if


Esta es la más común de las sentencias condicionales y permite ejecutar determinadas sentencias en virtud de una comparación de las ya mencionadas. La forma general es la siguiente: If condición Then sentencias si condición=True [Else] sentencias si condición=False End If Else es opcional, o sea, puede colocarse el End If luego de las sentencias si la condición=True. Una variante de esta sentencia es la siguiente: If condición1 Then sentencias si condición1=True ElseIf condición2 Then sentencias si condición=False y condición2=True [Else] sentencias si condición=False y condición2=False End If Un ejemplo práctico de estos dos modos de la sentencia If es el siguiente: Const Numero As Integer=4666 Dim Variable As Byte If Numero>=5000 Then Variable=100 Else:Variable=200 End If Al salir de esta sentencia, Variable valdrá 200; se ejecutó la sentencia después de Else, ya que Numero (4666) es menor que 5000.




Sentencia Select Case… Case … End Select


Esta sentencia condicional se utiliza para cuando haya que hacer múltiples evaluaciones de una misma expresión; se da a la sentencia una expresión de base y cada comparación es un caso. La forma general de esta sentencia es la siguiente: Select Case expresión Case comparación1 sentencias si comparación1 es verdadera Case comparación2 sentencias si comparación1 es verdadera … End Select Se evalúa la expresión en cada sentencia Case y cuando se encuentra una comparación que sea verdadera, se ejecuta ese grupo de sentencias y se sale de este bloque. Por ejemplo: Const Palabra As String=”Visual Basic” Dim Resultado As Byte Select Case Len(Palabra) ‘Len=12 Case 2,4 Resultado=1 Case 3 To 6 Resultado=2 Case Is>11 Resultado=3 Case Else Resultado=4 End Select Se evalúa la expresión Len(Palabra), que devuelve un valor numérico con la cantidad de letras que contiene la constante Palabra (12 caracteres). Si la expresión Len(Palabra) vale 2 o 4, Resultado valdrá 1; si es un valor entre 3 o 6 (inclusive) valdrá 2; si es mayor que 11, Resultado valdrá 3, si ninguno de los anteriores llegara a ser cierto, Resultado valdrá 4. Cuando se salga de este bloque, Resultado valdrá 3, ya que el Case Is>11 es verdadero.



Bucle For…Next


Este es un bucle muy utilizado en la programación. Permite repetir las sentencias entre For y Next, mientras se incrementa o reduce el valor de una variable, el cual tendrá dos límites. La forma general de este bucle es la siguiente: For Var=ValorInicial To ValorFinal Sentencias [Exit For] Next Var Var es una variable numérica que controla el bucle, ValorInicial es el valor inicial de la variable cuando entre en el bucle y ValorFinal será el valor que marcará el fin del bucle. Exit For es opcional y permite salir del bucle antes de que Var sea mayor o igual que ValorFinal. Por ejemplo: Dim unArray(4)As Integer, x As Integer For x=0 To 4 unArray(x)=5+x Next x Este bucle recorre los elementos de unArray y le asigna valores, 5 unidades más el valor del índice del elemento. Al salir del bucle el array unArray tendrá los siguientes valores: unArray(0)=5; unArray(1)=6; unArray(2)=7; unArray(3)=8; unArray(4)=9 Otra modalidad del bucle For es uno que permite recorrer un array o una colección en que no se sabe la cantidad de elementos que contiene; su forma general es la que sigue: For Each Variable In Array/Colección Sentencias [Exit For] Next Donde Variable es una variable de tipo Variant en el caso de que Array/Colección sea un array o un objeto en el caso de que Array/Colección sea una colección de objetos. También puede salirse en el momento que se desee con Exit For.



Sentencia Goto Sub

Esta sentencia sirve para pasar a una parte específica de un procedimiento o función. Algunos programadores ven a esta sentencia como una mala práctica de programación; personalmente creo que es una sentencia más, que tiene una utilidad y que mientras dé resultado su utilización, la utilizo. Queda a criterio de cada quién. En una parte del código se coloca una etiqueta y esta sentencia realiza un salto hacia esa etiqueta; por ejemplo: Private Function Múltiplode2_3_5_7(Numero As _ Long)As Boolean If Numero Mod 2>0 Then GoTo Noesmult End If If Numero Mod 3>0 Then GoTo Noesmult End If If Numero Mod 5>0 Then GoTo Noesmult End If If Numero Mod 7>0 Then GoTo Noesmult End If Múltiplode2_3_5_7=True:Exit Function Noesmult: Múltiplode2_3_5_7=False End Function Esta función examina si Numero es divisible entre 2, entre 3, entre 5 y por último entre 7. Si en algún momento se llega a verificar que Numero no es divisible por los ya mencionados se salta hasta la etiqueta Noesmult, donde se le da a la función el valor False, de lo contrario, luego de la última comparación se le da a la función el valor True y se sale de la función con Exit Function.


While… Wend

Este bucle se ejecuta entre las sentencias While y Wend, mientras la condición especificada en la cláusula While sea verdadera, pero no tiene una sentencia para salir antes de que se cumpla la condición especificada. La forma general de este bucle es la siguiente: While condición sentencias Wend Este bucle también permitiría controlar los valores de un array, incrementar una variable, etc. Por ejemplo: Dim x As Integer, Fact As Long x=1:Fact=x While x<=11 Fact=Fact*x x=1+x Wend
Cuando se salga del bucle While…Wend, cuando x=12 el valor de la variable Fact será 39916800, el factorial de 11.



Do… Loop


Este es un bucle similar al bucle While, pero permite controlar mejor la ejecución del bucle y tiene sentencia Exit Do, para la salida antes del final. En este bucle puede especificarse si se ejecutarán las sentencias mientras o hasta que se cumpla la condición especificada, con las palabras While y Until, tanto al entrar al bucle como al salir. Las formas generales son las siguientes: Forma 1, comprobación al entrar al bucle: Do While/Until condición sentencias [Exit Do] Loop Forma 2, comprobación al salir del bucle: Do Sentencias [Exit Do] Loop While/Until condición Por ejemplo, las siguientes sentencias Do son iguales pero con comprobación al inicio en la primera y al final en la segunda. Antes se tomarán como declaradas las siguientes variables: Private Cadena As String, x As Byte Primer sentencia: x=65 Do Until x=75 Cadena=Cadena + Chr(x):x=1+x Loop Al final de esta sentencia la variable x valdrá 75 y la variable Cadena tendrá el texto “ABCDEFGHIJ”. Segunda sentencia: x=65 Do Cadena=Cadena + Chr(x):x=1+x Loop Until x=75 Al final de esta sentencia la variable x valdrá 75 y la variable Cadena tendrá el texto “ABCDEFGHIJ”.


El bloque With

La instrucción With permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto o de una estructura. Por ejemplo, para cambiar un número de propiedades diferentes en un único objeto, es más conveniente colocar las instrucciones de asignación de las propiedades en la estructura de control With, haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignación de propiedad. Por ejemplo la siguiente etiqueta (Label1) : With Label1 .Alignment=1:.Caption=”Mi etiqueta” .BackColor=vbBlack:.ForeColor=vbWhite Text1.Text=.Name End With



Casos imposibles

Hay ciertas observaciones que deben hacerse al construir bucles, y es la contemplación de los casos imposibles, que producen entradas en los bucles y que, al no llegar nunca a cumplirse la condición especificada para la salida, se bloquea el sistema (sobre todo con los bucles While y Do), una sentencia de este tipo sería la siguiente: Dim Var As Byte, Var2 As Boolean Var=68 While Var<70
var2="Not"Bucle For…Next. Este es un bucle muy utilizado en la programación. Permite repetir las sentencias entre For y Next, mientras se incrementa o reduce el valor de una variable, el cual tendrá dos límites. La forma general de este bucle es la siguiente: For Var=ValorInicial To ValorFinal Sentencias [Exit For] Next Var Var es una variable numérica que controla el bucle, ValorInicial es el valor inicial de la variable cuando entre en el bucle y ValorFinal será el valor que marcará el fin del bucle. Exit For es opcional y permite salir del bucle antes de que Var sea mayor o igual que ValorFinal. Por ejemplo: Dim unArray(4)As Integer, x As Integer For x=0 To 4 unArray(x)=5+x Next x Este bucle recorre los elementos de unArray y le asigna valores, 5 unidades más el valor del índice del elemento. Al salir del bucle el array unArray tendrá los siguientes valores: unArray(0)=5; unArray(1)=6; unArray(2)=7; unArray(3)=8; unArray(4)=9 Otra modalidad del bucle For es uno que permite recorrer un array o una colección en que no se sabe la cantidad de elementos que contiene; su forma general es la que sigue: For Each Variable In Array/Colección Sentencias [Exit For] Next Donde Variable es una variable de tipo Variant en el caso de que Array/Colección sea un array o un objeto en el caso de que Array/Colección sea una colección de objetos. También puede salirse en el momento que se desee con Exit For. Sentencia Goto Sub. Esta sentencia sirve para pasar a una parte específica de un procedimiento o función. Algunos programadores ven a esta sentencia como una mala práctica de programación; personalmente creo que es una sentencia más, que tiene una utilidad y que mientras dé resultado su utilización, la utilizo. Queda a criterio de cada quién. En una parte del código se coloca una etiqueta y esta sentencia realiza un salto hacia esa etiqueta; por ejemplo: Private Function Múltiplode2_3_5_7(Numero As _ Long)As Boolean If Numero Mod 2>0 Then GoTo Noesmult End If If Numero Mod 3>0 Then GoTo Noesmult End If If Numero Mod 5>0 Then GoTo Noesmult End If If Numero Mod 7>0 Then GoTo Noesmult End If Múltiplode2_3_5_7=True:Exit Function Noesmult: Múltiplode2_3_5_7=False End Function Esta función examina si Numero es divisible entre 2, entre 3, entre 5 y por último entre 7. Si en algún momento se llega a verificar que Numero no es divisible por los ya mencionados se salta hasta la etiqueta Noesmult, donde se le da a la función el valor False, de lo contrario, luego de la última comparación se le da a la función el valor True y se sale de la función con Exit Function. While… Wend. Este bucle se ejecuta entre las sentencias While y Wend, mientras la condición especificada en la cláusula While sea verdadera, pero no tiene una sentencia para salir antes de que se cumpla la condición especificada. La forma general de este bucle es la siguiente: While condición sentencias Wend Este bucle también permitiría controlar los valores de un array, incrementar una variable, etc. Por ejemplo: Dim x As Integer, Fact As Long x=1:Fact=x While x<=11 Fact=Fact*x x=1+x Wend Cuando se salga del bucle While…Wend, cuando x=12 el valor de la variable Fact será 39916800, el factorial de 11. Do… Loop Este es un bucle similar al bucle While, pero permite controlar mejor la ejecución del bucle y tiene sentencia Exit Do, para la salida antes del final. En este bucle puede especificarse si se ejecutarán las sentencias mientras o hasta que se cumpla la condición especificada, con las palabras While y Until, tanto al entrar al bucle como al salir. Las formas generales son las siguientes: Forma 1, comprobación al entrar al bucle: Do While/Until condición sentencias [Exit Do] Loop Forma 2, comprobación al salir del bucle: Do Sentencias [Exit Do] Loop While/Until condición Por ejemplo, las siguientes sentencias Do son iguales pero con comprobación al inicio en la primera y al final en la segunda. Antes se tomarán como declaradas las siguientes variables: Private Cadena As String, x As Byte Primer sentencia: x=65 Do Until x=75 Cadena=Cadena + Chr(x):x=1+x Loop Al final de esta sentencia la variable x valdrá 75 y la variable Cadena tendrá el texto “ABCDEFGHIJ”. Segunda sentencia: x=65 Do Cadena=Cadena + Chr(x):x=1+x Loop Until x=75 Al final de esta sentencia la variable x valdrá 75 y la variable Cadena tendrá el texto “ABCDEFGHIJ”. El bloque With. La instrucción With permite realizar una serie de instrucciones sobre un objeto especificado sin volver a calificar el nombre del objeto o de una estructura. Por ejemplo, para cambiar un número de propiedades diferentes en un único objeto, es más conveniente colocar las instrucciones de asignación de las propiedades en la estructura de control With, haciendo referencia al objeto una vez, en lugar de hacerlo con cada asignación de propiedad. Por ejemplo la siguiente etiqueta (Label1) : With Label1 .Alignment=1:.Caption=”Mi etiqueta” .BackColor=vbBlack:.ForeColor=vbWhite Text1.Text=.Name End With Casos imposibles. Hay ciertas observaciones que deben hacerse al construir bucles, y es la contemplación de los casos imposibles, que producen entradas en los bucles y que, al no llegar nunca a cumplirse la condición especificada para la salida, se bloquea el sistema (sobre todo con los bucles While y Do), una sentencia de este tipo sería la siguiente: Dim Var As Byte, Var2 As Boolean Var=68 While Var<70 var2="Not">




VARABLES

Las variables son espacios en la memoria donde se guarda un tipo de dato. A estos espacios de memoria se accede mediante un identificador que es el nombre de la variable. Las variables pueden tener cualquier nombre, siempre y cuando no sea una palabra clave (Keyword), que no contenga caracteres comodines (“, ¿, \, /, *, etc.) y que no empiecen con un número. Visual Basic no distingue entre mayúsculas y minúsculas por lo que la variable Población será la misma que población y la misma que PoBlacióN. Las variables se declaran entonces con un nombre que identifica un lugar en la memoria y que almacena un tipo particular de dato (los tipos de datos vistos anteriormente). Las variables deben declararse con un alcance y de un tipo determinado; la forma general de declararlas es la siguiente: Public/Private/Dim/Static nVariable As Tdato Donde Public, Private, Dim o Static representa el ámbito de la variable; nVariable es el nombre de la variable (identificador) y Tdato es el tipo de dato que almacenará. Ahora se definirá qué es el ámbito de una variable (válido también para el ámbito de los procedimientos y funciones). El ámbito de una variable es el alcance que esta tiene, o sea, los lugares donde esta variable se puede utilizar. Aquí es necesario que se defina lo que es un módulo estándar (*.bas). Este tipo de fichero sirve para almacenar código, el cual será accesible desde todo el proyecto, no tiene interfaz gráfica ya que solo almacena código. Para agregar un módulo estándar debe ir al menú Proyecto, Agregar módulo, y se agrega el módulo estándar. La siguiente tabla explica el alcance de una variable en función del lugar y su forma de declaración:


Por ejemplo, se declarará una variable privada de tipo Long llamada Población: Private Población As Long o bien, Dim Población As Long También se puede utilizar un carácter especial (que aparece en los tipos de datos con la palabra signo) para declarar la variable; de la siguiente forma: Dim Población& Siempre es conveniente declarar una variable para utilizarla y es una buena práctica escribir en la parte de declaraciones del formulario la sentencia Option Explicit la que evita que se utilicen variables no declaradas. Esto es útil para evitar declaraciones implícitas de variables que produzcan errores; por ejemplo, si hay declarada una variable llamada Banco y por error se escribe Banca, Visual Basic tomará a Banca como una variable implícita de tipo Variant, a menos que se haya utilizado la palabra clave Option Explicit que en caso de encontrar una variable no declarada no permitirá su utilización. Esta variable almacenará valores de tipo Long. Para asignarle un valor, por ejemplo 159840 se procede de la siguiente forma: Población=159840 Si desea colocarse en una etiqueta llamada Label1 el valor de la variable Población se utiliza una sentencia como la siguiente: Label1.Caption=Población También puede asignar a una variable el valor resultante de una llamada a una función. Se utilizará una función de Visual Basic llamada Len, que devuelve el tamaño en bytes de una variable o bien, los caracteres de una cadena de texto. Dim Letras As Integer Letras=Len(“Microsoft Visual Basic 6.0”) El valor de la variable de tipo Integer Letras será 26. Las variables se pueden pasar como argumentos en llamadas a funciones o procedimientos, operar como si de valores se tratara, etc. Cuando se entra a un procedimiento o función y hay en él una variable local, esta se inicia a cero en caso de ser numérica, a cadena vacía en caso de ser caracteres y a Empty (vacío) en caso de ser Variant. Cuando se sale de ese procedimiento o función la variable se pierde y al volver a entrar su valor vuelve a inicializarse como se explicó. Para que esto no ocurra, puede declararse una variable local como Static, de la siguiente forma: Static nVariable As Tdato Cuando se salga del procedimiento o función y se vuelva a ingresar, el valor que la variable tenía no se perdió sino que se mantiene.

No hay comentarios: