Visual Basic
ELEMENTOS DEL LENGUAJE
El código
en VB se almacena en módulos. Cada módulo está subdividido en distintas
secciones; una para cada objeto del módulo. Cada sección de código puede
contener uno o más procedimientos distintos. Y un procedimiento está formado
por comentarios, declaraciones de constantes y de variables, expresiones,
sentencias y llamadas a procedimientos.
Comentarios
Cuando
una frase va precedida de una comilla simple (‘), VB interpreta que esa frase
es un comentario y no ejecuta acción alguna sobre ella. Por ejemplo:
‘ Cálculo de la velocidad
media
suma = 0 ‘ Se inicia la
variable suma con el valor 0
Constantes numéricas y de caracteres
Una
constante es un valor que no cambia durante la ejecución de un programa. VB
admite números decimales, hexadecimales y octales. Un número hexadecimal va
precedido por &H y un número
octal va precedido por &O. El
siguiente ejemplo muestra los mismos números en decimal, hexadecimal y octal.
9
15
1034
son números decimales
&H9
&HF
&H40A
son números hexadecimales
&O11
&O17
&O2012
son números octales
Una
constante de caracteres o constante alfanumérica es una cadena de caracteres
encerrada entre comillas dobles. Por ejemplo:
“Grados centígrados: “
Variables
Una
variable contiene un valor que puede modificarse a lo largo de la ejecución de
la aplicación. Cada variable tiene atributos propios, como:
¬
Nombre: es el nombre que
utilizamos para referirnos a la variable en la aplicación.
¬
Tipo: el tipo determina qué
clase de valores puede almacenar la variable.
¬
Ámbito: el ámbito de una
variable especifica en qué parte de la aplicación es conocida la variable y
por lo tanto puede utilizarse.
Nombres de variables
El
nombre de una variable tiene que empezar por una letra, puede tener hasta 255
caracteres de longitud y debe ser único dentro de su ámbito.
Los
caracteres pueden ser letras, dígitos, el carácter de subrayado y los
caracteres de declaración del tipo de variable (%, &, ¡, #, @ y $).
No se
puede utilizar el punto ni otros caracteres que tienen un significado especial
para VB; por ejemplo, los paréntesis. Los caracteres de declaración del tipo,
cuando se utilicen, tiene que ocupar la última posición.
El
nombre de una variable no puede ser una palabra reservada. Una palabra reservada tiene un significado especial para VB. Son
palabras reservadas las sentencias predefinidas (como For), los nombres de funciones (como Val), métodos (como Hide),
propiedades (como Caption), tipos
(como Long) y operadores (como And).
Tipos de datos intrínsecos
Todas
las variables tienen un tipo de dato que determina la clase de datos que pueden
almacenar. Una variable puede ser de alguno de los tipo siguientes:
|
Tipo |
Descripción |
Car-Tipo |
Rango |
|
Integer |
Entero
(2 bytes) |
% |
-32768
a 32767 |
|
Long |
Entero
largo (4 bytes) |
& |
-2147483648
a 2147483647 |
|
Single |
Coma
flotante. Precisión
simple (4 bytes) |
¡ |
-3.40E+38
a 3.40E+38 |
|
Double |
Coma
flotante. Precisión
doble (8 bytes) |
# |
-1.79D+308
a 1.79D+308 |
|
Currency |
Número
con punto decimal fijo (8 bytes) |
@ |
+/-
922337203685477.5807 |
|
String |
Cadena
de caracteres (10 bytes + 1 byte por carácter) |
$ |
231
caracteres (64 K si es de longitud fija) |
|
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 tipo Object |
|
Variant (por omisión) |
Con
números 16 bytes. Con cars. 22 bytes + 1 byte por caracter |
(ninguno) |
Almacena
datos de cualquier tipo de los anteriores |
|
Decimal |
Números
con 0 a 28 decimales (12 bytes) (No
se puede declarar una variable de este tipo. Sólo se puede utilizar con
un Variant) |
(ninguno) |
Valor
mayor con 0 decs: +/-79.228.162.514.264.337.593.543.950.335 Valor
mayor con 28 decs: +/-7,9228162514264337593543950335 |
Un número
expresado en coma flotante es un número fraccionario con punto decimal
variable. En el tipo Currency el
punto decimal es fijo (cuatro decimales).
Declaración de variables
Antes
de utilizar una variable, es aconsejable declarar su tipo. Una forma de hacerlo
es utilizando la sentencia Dim (o una
de las palabras Public, Private
o Static). Cualquier declaración de éstas inicia las variables numéricas
con el valor cero y las variables alfanuméricas con el carácter nulo. Por
ejemplo:
Dim I As Integer
Dim R As Double
Dim Nombre As String
Dim Etiqueta As String * 10
Dim F as Currency
Dim L As Long, X As Currency
Observe
que en una sentencia Dim puede
realizar más de una declaración. La cláusula opcional As tipo de la instrucción
Dim le permite definir el tipo de
dato o de objeto de la variable que va a declarar.
Cuando
se declara una variable y no se especifica su tipo, se asume que es de tipo Variant.
Por ejemplo:
Dim A. B As Integer
La
sentencia anterior le puede inducir a pensar que A
y B son de tipo entero, lo cual no
es cierto; A es de tipo Variant
(por omisión) y B es de tipo Integer.
Otra
forma de declarar una variable es utilizando los caracteres de declaración de
tipo. Por ejemplo:
I%
Variable entera
R#
Variable real de precisión doble
Nombre$
Cadena de caracteres
F@
Variable fraccionaria
Cuando
se utiliza una variable que no se ha declarado, se asume que es de tipo Variant.
Por ejemplo:
L = “Dato:” ‘variable de tipo String
‘...
L = 3.25678 ‘variable de tipo
Double
Suponiendo
que L no ha sido declarada explícitamente,
las sentencias anteriores declaran L como una variable Variant
que ha cambiado su tipo para comportarse como una cadena de caracteres, y a
continuación vuelve a cambiar su tipo para comportarse como una variable de
coma flotante de doble precisión.
Conversiones entre datos numéricos
Cuando
una variable numérica de un tipo se asigna a otra variable numérica de un tipo
diferente, VB convierte el dato asignado al tipo de la variable destino de los
datos. Las conversiones se hacen de acuerdo con las reglas siguientes:
Dim ent1 As Integer, ent2 As
Integer
Dim fracsp As Single, fracdp As
Double
1.
Si
se asigna un valor numérico de una precisión a una variable numérica de
precisión diferente, el número será almacenado con la precisión declarada en
el nombre de la variable destino. Por ejemplo:
ent1 = 40.17
ent2 = 37.83
Print ent1, ent2 ‘resultado: 40
38
2.
Si
se asigna un valor numérico de una precisión más alta a una variable de
precisión más baja, dicho valor se redondea, no se trunca. Por ejemplo:
fracsp = 22.3445577
ent1 = 17.5
Print fracsp, ent1 ‘resultado:
22.34456 18
ent1 = 17.4
ent2 = 17.6
Print ent1, ent2
fracsp = 22.37
Print fracsp ‘ resultado: 22.37
Tenga
en cuenta que un valor de tipo Single
no tiene más de 7 cifras significativas (cifras enteras más cifras decimales).
Por lo tanto, el redondeo ocurre cuando tratamos de asignar más cifras de las
aceptadas por la variable. Un razonamiento similar se puede seguir para el resto
de los tipos.
3.
Si
se cambia un número de precisión más baja a una precisión más alta, el número
de precisión más alta resultante no podrá ser más exacto que el número de
precisión más baja. Por ejemplo:
fracsp = 17.55
fracdp = fracsp
Print fracsp, fracdp
‘resultado: 17.55 17.5499992370605
En
este ejemplo se ha asignado un valor de precisión simple a una variable de
precisión doble. Quizás usted esperaba como resultado el mismo valor asignado.
4.
Durante
la evaluación de una expresión, todos los operandos en una operación aritmética
o de relación se cambian al mismo grado de precisión, que es el del operando más
preciso. Por ejemplo:
ent1 = 8
fracdp = 3
Print ent1 / fracdp ‘resultado:
2.66666666666667
Para
probar lo expuesto, cree una nueva aplicación, asigne al formulario por omisión
el título Conversiones entre datos numéricos,
asigne a su propiedad AutoRedraw el
valor True y a su propiedad BackColor
el color blanco. Luego, escriba el siguiente código.
(General)
Option Explicit
Dim ent1 As Integer, ent2 As
Integer
Dim fracsp As Single, fracdp As
Double
Private Sub Form_Load()
ent1 = 40.17
ent2 = 37.83
Print ent1, ent2 ‘resultado: 40 38
fracsp = 22.3445577
ent1 = 17.5
Print fracsp, ent1 ‘resultado: 22.34456 18
fracsp = 17.55
fracdp = fracsp
Print fracsp, fracdp ‘resultado:
17.55 17.5499992370605
ent1 = 8
fracdp = 3
Print ent1 / fracdp ‘resultado: 2.66666666666667
End Sub
Guarde
la aplicación asignando, al formulario el nombre conver.frm y al proyecto el nombre conver.vbp, ejecútela y observe los resultados. Como práctica,
defina otras variable de tipos diferentes, asígnelas valores de interés y
compruebe los resultados.
Declaración explícita
En
VB no es necesario declarar una variable antes de utilizarla. Sin embargo, esta
forma de trabajar puede ser una fuente de errores. Por ejemplo:
Dim M As Integer, N As Integer
VarTemp = M
‘...
N = VaTemp
En
este ejemplo, VarTemp no se ha
declarado explícitamente. Esto no supone un error, ya que VB se encarga de
crear dicha variable. Ahora observe que, por error, el nombre de esa variable se
ha escrito mal en la última sentencia. Cuando VB encuentra un nuevo nombre, no
puede determinar si es debido a un error o a la definición de una nueva
variable.
Para
evitar este tipo de errores, podemos indicar a VB que genera un mensaje de error
siempre que encuentre una variable no declarada explícitamente. Para ello, como
ha podido observar en la figura del ejemplo anterior, escribiremos la sentencia Option Explicit en la sección de
declaraciones del formulario, del módulo o de la clase.
Esta
sentencia opera sólo en el formulario o en el módulo donde se haya puesto.
Para tener esta opción activa para todo el código de una aplicación, ejecute
la orden Opciones del menú Herramientas,
haga clic en la pestaña Editor y
seleccione la opción Requerir declaración
de variables.
Módulos de Visual Basic
El código
de una aplicación VB se edita en módulos. Los módulos tienen incorporadas
funciones automáticas de formato y comprobación de sintaxis. Hay tres tipos de
módulos:
·
Módulo de formulario: es un fichero con
extensión .frm que puede contener
descripciones gráficas de un formulario, sus controles y sus valores de
propiedades, declaraciones de constantes, variables y procedimientos externos a
nivel del formulario, así como procedimientos conducidos por eventos y
procedimientos generales.
·
Módulo estándar: es un fichero con
extensión .bas que sólo contiene
declaraciones y definiciones de procedimientos, tipos y datos a los que tienen
acceso otros módulos de la aplicación. Las declaraciones a nivel de módulo y
las definiciones en un módulo estándar son Public
por omisión.
·
Módulo de clase: es un fichero con
extensión .cls que contiene la
definición de una clase de objetos; esto es, la definición de cada una de sus
propiedades y métodos.
Ambito de las variables
Se
entiende por ámbito o alcance de una variable el espacio de la aplicación
donde la variable es visible y por lo tanto se puede utilizar. La figura
siguiente indica los lugares donde se puede declarar una variable:

Aplicación
La
tabla siguiente resume cómo debe declararse una variable en función del
espacio donde deseamos que sea visible:
|
Ambito |
Declaración |
|
Local |
Dim, Static o ReDim (dentro
de un procedimiento) |
|
Módulo |
Dim o Private (sección de declaraciones del módulo) |
|
Global |
Public (sección de
declaraciones de un módulo) |
A
nivel de módulo, no hay diferencias entre Dim
y Private, pero se aconseja utilizar Private
en contraste con Public. En un
procedimiento no tiene lugar esta observación, ya que no se puede utilizar Public.
Variables locales
Una variable
local se reconoce solamente en el procedimiento en el que está definida.
Fuera de ese procedimiento, la variable no es conocida. Su utilización más común
es intervenir en cálculos intermedios.
Para
declarar una variable local a un procedimiento, coloque la sentencia
correspondiente dentro del mismo. Por ejemplo, el procedimientos Form_Load que se muestra a continuación define ent1 y ent2 como variables
locales.
Private Sub Form_Load()
Dim ent1 As Integer, ent2 As Integer
ent1 = 40.17
ent2 = 37.83
Print ent1, ent2
End Sub
Una
variable local es reiniciada cada vez que se entra en el procedimiento. En otras
palabras, una variable local no conserva el valor entre una llamada al
procedimiento y la siguiente. Para hacer que esto suceda, hay que declarar la
variable estática. VB inicia una variable estática la primera vez que se llama
al procedimiento. Para declarar una variable estática, utilice la palabra clave
Static en lugar de Dim.
Por ejemplo:
Static ent1 As Integer
Para
hacer que todas las variables de un procedimiento sean estáticas, puede también
proceder declarando el procedimiento estático. Por ejemplo:
Private Static Sub Form_Load()
‘...
End Sub
Si
una variable aparece en un procedimiento y no está explícitamente declarada,
es por omisión local. En cualquier caso, se aconseja declarar todas las
variables explicítamente.
Variables utilizadas dentro
del módulo
Una variable
declarada a nivel de módulo (formulario, estándar o clase) puede ser
compartida por todos los procedimientos de ese módulo. Una variable a nivel de
módulo hay que declararla con Dim o Private en la sección de declaraciones del módulo (sección General).
Este
tipo de variables son por omisión estáticas.
Variables globales
Una variable
global es una variable a nivel del módulo pero a la que se puede acceder
desde cualquier otro módulo.
Para
hacer que una variable sea global o pública, hay que declararla Public en la sección de declaraciones del módulo.
Por
ejemplo, vuelva a la aplicación realizada anteriormente y ejecute la orden Agregar
módulo del menú Proyecto. A
continuación mueva, no copie, las definiciones de las variables que relizó en
el formulario, al módulo estándar que acaba de crear, y guarde este módulo
con el nombre conver.bas.
Si
ahora ejecuta la aplicación, obtendrá un error: Error
de compilación: Variable no definida; porque las variables han sido
declaradas en conver.bas utilizando Dim,
lo que restringe su utilización a los procedimientos que definamos en este módulo.
Para hacer que dichas variables puedan ser utilizadas por todos los módulos de
la aplicación, hay que declararlas Public.
Cuando
una variable se declara Public en un
formulario, por ejemplo en Form1, para
acceder a ella desde otro módulo es necesario especificar su pertenencia: esto
es, de qué objeto es dato miembro dicha variable. Por ejemplo, si a nivel de Form1
realizamos la declaración
Public varform As Integer
para
acceder a esta variable desde un procedimiento del módulo estándar, procederíamos
de forma similar a:
Public Sub Test()
‘varform esta definida en el formulario
Form1.varform = 10
Form1.Print Form1.varform
End Sub
Para
añadir el procedimiento Test, ejecute
la orden Agregar procedimiento del menú
Herramientas. Para que este
procedimiento se ejecute y escriba los resultados sobre el formulario,
simplemente hay que invocarlo. Por ejemplo, añada al procedimiento Form_Load la línea:
Private Sub Form_Load()
‘...
Test ‘llama al procedimiento Test del módulo estándar
End Sub
En
un procedimiento no se pueden declarar variables globales.
Variables con el mismo nombre
Una
variable local y otra a nivel del módulo pueden tener el mismo nombre, pero no
son la misma variable. La regla para estos casos es que el procedimiento siempre
utiliza la variable de nivel más cercano (local, módulo y global; en este
orden). En otro caso, debe calificar la variable, por ejemplo:
Public Temp As Integer
‘declaración en Form1
Public Sub Test()
‘procedimiento en Modulo1
Dim Temp As Integer
Temp = 10 ‘referencia a la variable local
MsgBox Form1.Temp ‘referencia a la variable global
End Sub
Si
varias variables públicas comparten el mismo nombre en diferentes módulos,
para diferenciarlas es necesario especificar su pertenencia. Por ejemplo, si hay
una variable entera X declarada tanto
en el módulo Form1 como en el Modulo1,
debemos referirnos a ella así:
MsgBox Form1.X ‘visualiza el
valor de la X de Form1
MsgBox Modulo1.X ‘visualiza el
valor de la X de Modulo1
Es
aconsejable en programación que los nombres de las variables sean diferentes
entre sí, así como los nombres de las propiedades y de los módulos.
Constantes simbólicas
A
menudo utilizamos valores constantes una y otra vez en el código, o bien el código
depende de ciertos números difíciles de recordar. En estos casos, la mejor
solución es definir estos valores como constantes
simbólicas y utilizar en lo sucesivo los nombres que identifican estas
constantes.
Para
definir una constante simbólica, utilice la siguiente sintaxis:
[Public|Private] Const constante [As
tipo] = expresión
Si
no declara explícitamente el tipo de constante (utilizando As tipo), se asigna a la
constante el tipo de datos más apropiado a su valor.
Para
nombrar una constante, se utilizan las
mismas reglas que se aplican para nombrar variables. La expresión puede ser numérica, alfanumérica o de tipo fecha y
hora. Por ejemplo:
Public Const MAX_ELEMS = 99
Public Const VERSION = “ver.
4.05.0A”
Const PI = 3.1415926, DOS_PI = 2
* PI
Const FECHA_POR_DEFECTO =
#1/01/97#
Es
aconsejable definir todas las constantes globales en un único módulo. El ámbito
de una constante se define por las mismas reglas que las variables.
Operadores
La
tabla que se muestra a continuación presenta el conjunto de operadores que
soporta VB ordenados de mayor a menor prioridad respecto a cómo se evalúan
cuando varios de ellos intervienen en una misma expresión. Los operadores que
aparecen sobre una misma línea tienen igual prioridad. Las operaciones que se
incluyan entre paréntesis se evaluarán antes, ejecutándose primero los paréntesis
más internos.
|
Tipo |
Operación |
Operador |
|
Aritmético |
Exponenciación |
^ |
|
|
Cambio
de signo |
- |
|
|
Multiplicación
y división |
*,
/ |
|
|
División
entera |
\ |
|
|
Resto
de una división entera |
Mod |
|
|
Suma
y resta |
+,
- |
|
Concatenación |
Concatenar
o enlazar |
& |
|
Relacional |
Igual,
distinto, menor, mayor... |
|