TEMA 13: Características y estructura del lenguaje
Hemos comprobado que en los ejemplos anteriores utilizamos código que posiblemente no entendemos; este tema trata de explicar ese código. También podemos consultar en cualquier momento la Ayuda que incorpora Visual Basic, así como la documentación de los Libros de pantalla.
TIPOS DE DATOS
| TABLA 16. LOS TIPOS DE DATOS UTILIZADOS EN VISUAL BASIC | |||
| Tipo | Descripción | Car-tipo | Rango |
| Integer | Entero (2 bytes) | % | -32768 a 32767 |
| Long | Entero largo (4 bytes) | & | -2147483648 a 2147483647 |
| Single | Real simple precisión (4 bytes) | ! | -3.40E+38 a 3.40E+38 |
| Double | Real doble precisión (8 bytes) | # | -1.79D+308 a 1.79D+308 |
| Currency (Moneda) |
Número
con punto Decimal fijo (8 bytes) |
@ | -922337203685477.58
a 922337203685477.58 |
| String | Cadena de
caracteres (1 byte por carácter) |
$ | 64K cars.
en 16-bits 231 cars. en 32-bits |
| Byte | Carácter (1 byte) | (ninguno) | 0 a 255 |
| Boolean | Boolean (2 bytes) | (ninguno) | True o False |
| Date | Fecha/Hora (8 bytes) | (ninguno) | 1/Enero/100 a 31/Diciembre/9999 |
| Object | Referencia a un objeto (4 bytes) | (ninguno) | Cualquier referencia a un objeto |
| Variant (por defecto) |
16 (con
números) o 22 (con cars.) bytes + 1 byte por carácter |
(ninguno) | Almacena datos de cualquier tipo de los anteriores |
DECLARACIÓN DE VARIABLES Y CONSTANTES
Antes de utilizar una variable, es de buen ámbito declarar su tipo. Una forma de hacer esto es utilizando la sentencia Dim (o una de las palabras Public, Private o Static). Cualquier declaración de éstas inicializa las variables numéricas con el valor cero y las variables alfanuméricas con el carácter nulo.
Para declarar una variable dentro de un procedimiento se utiliza la sentencia Dim (es posible declarar varias variables de diferentes tipos en una misma sentencia Dim). Para guardar el valor anterior a partir de la segunda vez que iniciamos un procedimiento, hay que utilizar Static en lugar de Dim. La sintaxis es:
· Dim NombreVariable [As Tipo]
Dim Nombre As String
Dim Num, Tot As IntegerLos nombres de constantes siguen las mismas reglas que los de las variables, declarándose de forma similar. Para declarar una constante dentro de un procedimiento debe utilizarse la sentencia Const, cuya sintaxis es la siguiente:
· Const NombreConstante [As Tipo] = Expresión
Const PI = 3.14159265
Const NOMBRE = "Luis Miguel"Nota: si desea que Visual Basic genere un mensaje de aviso cada vez que encuentre una variable no declarada utilizar la sentencia Option Explicit. Debe situarse en la sección de declaraciones del módulo donde se desea que opere.
ÁMBITO DE LAS VARIABLES
Sé entiende por ámbito de una variable el espacio de la aplicación donde la variable es visible y por lo tanto se puede utilizar. El siguiente esquema indica los lugares donde se puede declarar una variable:

Notas: a nivel del módulo, no hay diferencias entre Dim y Private, pero se aconseja utilizar Private en contraste con Public. No se pueden declarar variables globales en un procedimiento.
SENTENCIAS (INSTRUCCIONES DE ASIGNACIÓN)
Una sentencia es una línea de texto que indica una o más operaciones a realizar. Una línea puede tener varias sentencias, separadas unas de otras por dos puntos. Ejemplo:
Total = Cantidad * Precio: Suma = Suma + Total
Igualmente, es posible escribir una sentencia que ocupe más de una línea de código. Para ello debe utilizarse el carácter de continuación de línea (un espacio en blanco seguido del carácter subrayado. Ejemplo:
Image1.Move X+10, _
Y+10La sentencia más común en Visual Basic es la sentencia de asignación. Proviene de la sentencia Let. Su forma general es Variable = Expresión . Ejemplo:
X = 1024
ETIQUETAS DE LÍNEA
Son cadenas de texto que deben comenzar por una letra y terminar con el carácter dos puntos. Suelen utilizarse para identificar la línea con objeto de un posible salto en el flujo del programa. Ejemplo:
Comienzo:
X = 20
.....
GoTo Comienzo
COMENTARIOS
Permiten realizar una descripción de las distintas operaciones que van realizando y no son tomadas en cuenta durante la ejecución de la aplicación. Se utiliza una comilla simple ('). Ejemplo:
'Esto es un comentario
CONVENCIONES DE NOMENCLATURA
En Visual Basic, los identificadores que el programador utiliza para nombrar procedimientos, variables, constantes, etc, deben seguir una serie de directrices:
- Deben comenzar siempre por una letra.
- Los caracteres que pueden utilizarse soon sólo letras, números y el carácter subrayado (_), quedando excluidos los símbolos de puntuación y caracteres especiales.
- El tamaño máximo es de 255 caracteres, aunque en el caso de los nombres de controles, Formularios, clases y módulos no deben exceder de 40 caracteres.
- No pueden ser iguales que las palabras reservadas del lenguaje.
ESTRUCTURAS DE CONTROL
Hay dos tipos:
- Estructuras de bifurcación o toma de decisión: permiten ejecutar una u otra sección del código, en función de que se cumpla o no una determinada condición. La estructura de decisión más sencilla se realiza con la sentencia If...Then. Su sintaxis es la siguiente:
· If Condición Then Instrucción
· If Condición Then
[Instrucciones]
End If· If Condición Then
[Instrucciones1]
Else
[Instrucciones2]
End If· If Condición1 Then
[Instrucciones1]
[Elseif Condición2 Then
[Instrucciones2]]
.....
[Else
[InstruccionesN]]
End IfLa sentencia Select Case permite crear una estructura de control similar al formato más completo de If, ejecutando un grupo de instrucciones de entre varios posibles, dependiendo del valor tomado por una determinada expresión de evaluación.
· Select Case Expresión
[Case ListaComprobación1
[Instrucciones1]]
[Case ListaComprobación2
[Instrucciones2]]
.....
[Case Else
[InstruccionesN]]
End SelectLos valores de Case pueden estar separados por comas (,), por un rango de valores, haciendo uso de la cláusula To o por un valor mediante la cláusula Is, acompañado de un operador relacional. Un ejemplo completo: Case 1 To 4, 7 To 9, 11, 13 Is > MaxNumber
- Estructuras repetitivas o de bucle: permiten la ejecución repetitiva de una sección de código mientras se cumpla una determinada condición. Tenemos las siguientes sentencias:
· Do [{While|Until} Condición]
[Instrucciones]
LoopSi la cláusula es While (mientras), se evalúa la condición. Si el resultado es True, se ejecutarán las instrucciones que contiene el bucle, al llegar la clásula Loop vuelve a evaluar la condición. Esta operación se repite hasta que la condición devuelva un valor False.
El funcionamiento es inverso cuando la sentencia Do va acompañado de la claúsula Until (hasta). Las instrucciones se ejecutan cuando el resultado de Condición es False, finalizando la estructura cuando el resultado es True.
· Do
[Instrucciones]
Loop [{While|Until} Condición]Se realiza la evaluación al final del bucle. La diferencia es que el grupo de instrucciones se ejecutan siempre, al menos 1 vez (dentro del bucle se debe variar la Condición, para que este no se ejecute indefinidamente).
· For Variable = ExpInicio To ExpFin [Step ExpIncremento]
[Instrucciones]
Next [Variable]La variable toma el valor indicado en ExpInicio. A continuación, se ejecutan las instrucciones que contiene el bucle. Una vez ejecutado, las variables de control se incrementará en el valor indicado en ExpIncremento, volviendo a ejecutarse las instrucciones. La operación se repite hasta que la variable de control supera el valor indicado en ExpFin, terminando la ejecución de la estructura. Si se omite la cláusula Step el valor por defecto de ExpIncremento es 1.
· For Each Variable In Grupo
[Instrucciones]
Next [Variable]La sentencia For Each...Next es similar a la sentencia For, con la diferencia de que ahora se repite un grupo de sentencias por cada elemento de una colección de objetos o de un array (excepto arrays de elementos de un tipo definido por el usuario). Esto es especialmente útil cuando no conocemos cuántos elementos cuántos elementos hay en la colección o en el array. Ejemplo: para ocultar todos los controles de un Formulario puede utilizar código similar a éste.
For Each Control In Form1.Controls
Control.Visible = False
Next Control
SENTENCIA WITH
With permite ejecutar una serie de sentencias sobre un mismo objeto de un tipo predefinido o de un tipo definido por el usuario. Su sintaxis es la siguiente:
· With Objeto
[Instrucciones]
End WithEjemplo:
With Text1
.BackColor = &HFF&
.ForeColor = &HC00000
.Font = "Arial"
End With
PROCEDIMIENTOS DE VISUAL BASIC
Hay dos tipos:
- Procedimientos de evento: se ejecutan en respuesta a un evento y están definidos por el propio Visual Basic. Sólo se incluyen en los módulos de Formulario y van siempre asociados a Formularios y controles.
Sintaxis y ejemplo para los Formularios:
· Private Sub Form_NombreEvento ([ListaArgumentos])
[Instrucciones]
End SubPrivate Sub Form_Load()
.....
End SubSintaxis y ejemplo para los controles:
· Private Sub NombreControl_NombreEvento ([ListaArgumentos])
[Instrucciones]
End SubPrivate Sub Command1_Click()
.....
End Sub- Procedimientos generales: son procedimientos que se invocan desde el código de otros procedimientos y son creados por el programador. Este tipo de procedimientos se incluyen en los módulos de Formulario, módulos estándar y módulos de clase. Los procedimientos generales son públicos por defecto y se sitúan en la sección General de los módulos de Formulario, módulos estándar y módulos de clase. Hay tres tipos:
Procedimientos Sub (o subrutinas): conjuntos de instrucciones que realizan una determinada tarea. Su sintaxis es la siguiente:
· [Private|Public] Sub NombreSubrutina [(ListaParámetros)]
[Instrucciones]
End SubLa llamada a los procedimientos Sub puede ser de alguna de las dos formas siguientes:
Procedimiento [(ListaArgumentos)]
Call Procedimiento [(ListaArgumentos)]Procedimientos Function (o funciones): igual que las subrutinas, pero, además, devuelven un valor a la instrucción que los ha invocado. Su sintaxis es:
· [Private|Public] Function NombreFunción [(ListaParámetros)] [As Tipo]
[Instrucciones]
End FunctionLa principal diferencia que representan las funciones respecto a las subrutinas es que las primeras devuelven un valor a la instrucción que las ha invocado. Por tanto, es posible declarar el tipo de datos que devuelven, utilizando la cláusula As al final de la cabecera. Ejemplo:
Public Function Area (B As Integer, H As Integer) 'Calcula el área de un triángulo
Area = (B * H) / 2
End FunctionPara llamar a la función, podemos utilizar cualquiera de las siguientes expresiones:
X = Area(100, 40)
Area 100, 40
Call Area(100, 40)Procedimientos Property: conjunto de instrucciones que sirven para crear y manipular propiedades personalizadas, se pueden usar para crear propiedades de sólo lectura de Formularios, módulos estándar y módulos de clase. Se deben usar en lugar de variables públicas y al definir el valor de una propiedad se tiene que ejecutar código.
Propertylet: establece el valor de una propiedad.
Propertyget: devuelve el valor de una propiedad.
Properyset: establece una referencia a un objeto.
SALIDAS DE BUCLES Y PROCEDIMIENTOS
Si queremos que termine de forma forzosa un bucle o un procedimiento puede emplear las siguientes palabras: Exit Do, Exit For, Exit Sub, Exit Function.