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... |
=,
<>, <, >, <=, >= |
|
Otros |
Comparar
dos expresiones de cars. |
Like |
|
|
Comparar
dos referencias a objetos |
Is |
|
Lógico |
Negación |
Not |
|
|
And |
And |
|
|
Or
inclusiva |
Or |
|
|
Or
exclusiva |
Xor |
|
|
Equivalencia
(opuesto a Xor) |
Eqv |
|
|
Implicación
(falso si primer operando verdadero y segundo operando falso) |
Imp |
Cuando
en una expresión aritmética intervienen operandos de diferentes tipos, el
resultado se expresa, generalmente, en la precisión del operando que la tiene más
alta. El orden, de menor a mayor, según la precisión, es Integer, Long, Single,
Double y Currency.
Los
operandos relacionales comparan dos expresiones dando un resultado True, False o Null
(no válido).
El
operador & realiza la concatenación
de dos operandos. Para el caso particular de que ambos operandos sean cadenas de
caracteres, puede utilizarse también el operador +. No obstante, para evitar ambigüedades utilice &.
El resultado es de tipo String si
ambas expresiones son de tipo String;
en otro caso, el resultado es de tipo Variant.
Los
operadores lógicos podemos utilizarlos de dos formas: para obtener un resultado
de tipo Boolean (True
o False), una vez evaluadas dos expresiones a True o a False, o para
realizar una operación lógica bit a bit entre dos expresiones numéricas,
colocando el resultado en la variable que se especifique.
Cuando
otros tipos de datos numéricos se convierten a Boolean,
0 pasa a ser False, mientras que
todos los demás valores pasan a ser True.
Cuando los valores Boolean se
convierten en otros tipos, False pasa
a ser 0, mientras que True se
transforma en –1.
Las
tablas de verdad correspondientes a estos operadores son las siguientes:
|
A |
B |
Not
A |
A
And B |
A
Or B |
A
Xor B |
A
Eqv B |
A
imp B |
|
True |
True |
False |
True |
True |
False |
True |
True |
|
True |
False |
False |
False |
True |
True |
False |
False |
|
False |
True |
True |
False |
True |
True |
False |
True |
|
False |
False |
True |
False |
False |
False |
True |
True |
El
operador Not, no lógico, se utiliza para negar la afirmación de un argumento.
Por ejemplo, para expresar “si a
no es mayor que b, entonces escribir a es
menor o igual que b”,
escribiremos:
If Not a > b then Print a; “
es menor o igual que “; b
Si
queremos expresar “mientras no existe,
hacer...”, escribiremos:
Dim existe As Boolean
existe = False
While Not existe
‘...
Wend
El
operador And, y lógico, recibe también a nivel de bits el nombre de producto lógico.
Por ejemplo, para expresar “si a
es mayor que b y b es mayor que c,
entonces escribir a”,
escribiremos:
If a > b And b > c then
Print a ‘si el resultado es True se escribe a
El
operador Or, o
lógico, reciba también a nivel de bits el nombre de suma lógica u Or
inclusivo. Por ejemplo, para expresar “si
a es igual a 0 o b es
igual a 0, entonces finalizar”, escribiremos:
If a = 0 Or b = 0 then End ‘si
el resultado es True se finaliza
El
operador Xor, Or exclusivo, recibe también a nivel de bits el nombre de suma
binaria. Por ejemplo:
a = 10: b = 8: c = 6
‘inicia variables
resu = a > b Xor b > c
‘devuelve False
resu = b > a Xor b > c
‘devuelve True
resu = a Xor b ‘devuelve
2 (comparación bit a bit)
Como
vemos, el operador Xor ejecuta también
una comparación bit a bit para identificar bits de dos expresiones numéricas y
establece el bit correspondiente en el resultado según la siguiente tabla de
decisión lógica:
|
Si bit en operando1
es |
Y bit en operando2 es |
El resultado es |
|
0 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
El
operador Like se utiliza para
comparar dos expresiones de caracteres (expresiones que son evaluadas a un
conjunto de caracteres contiguos). La sintaxis para este operador es la
siguiente:
[resultado = ] expresión Like
patrón
El resultado
será True si la expresión
coincide con alguna de las definidas por el patrón,
False si no hay coincidencia y Null
si la expresión y/o el patrón
son Null. Por omisión en las
comparaciones, se diferencian mayúsculas de minúsculas; esta característica
puede ser alterada por la sentencia Option
Compare. En el patrón se pueden
incluir las caracteres comodín siguientes:
|
En el patrón |
Se empareja en la
expresión con |
|
? |
Un solo carácter |
|
* |
Cero o más caracteres |
|
# |
Un solo dígito (0-9) |
|
[lista_cars] |
Un solo carácter de los
pertenecientes a la lista |
|
[!lista_cars] |
Un solo carácter de los no
pertenecientes a la lista |
Por
ejemplo
|
Con
este patrón |
esta
expresión retorna True |
esta
expresión retorna False |
|
a?a |
“aaa”,
“a5a”, “aBa”, “aba” |
“aBbca” |
|
a*a |
“aa”,
“aBa”, “aBBba” |
“aBbc” |
|
a#a |
“a0a”,
“a2a”, “a9a” |
“aaa”,
“aba”, “a29a” |
|
a[*]a |
“a*a” |
“aaa”,
“a0a” |
|
[a-z] |
“f”,
“p”, “j” |
“3”,
“A”, “.” |
|
[!0-9] |
“A”,
“a”, “.”, “-” |
“0”,
“4”, “7” |
|
a[!i-n]# |
“ab1”,
“az0”, “a99” |
“aic”,
“ak0”, “Ab1”, “az90” |
El
operador Is se utiliza para comparar
si una variable definida se refiere a un objeto de los existentes, o si dos
variables definidas se refieran al mismo objeto. Por ejemplo:
Dim A As Form
Dim B As Control
Set A = Form1
Set B = Text1
If A Is Form1 And B Is Text1 Then
‘acciones a ejecutar si el resultado es True
Else
‘acciones a ejecutar si el resultado es False
End If
Form
y Control son clases predefinidas en VB.
Utilización del tipo VARIANT
El
tipo de datos Variant permite
almacenar todos los tipos de datos definidos en el sistema. Esto lo defina como
un tipo de datos genérico. Cuando VB opera con datos de tipo Variant, ejecuta automáticamente las conversiones necesarias. No
obstante, hay que tener en cuenta las siguientes consideraciones:
·
Cuando
se ejecutan operaciones aritméticas, su contenido tiene que poderse convertir a
un valor numérico.
·
Como
el operador + puede ser utilizado para sumar valores y concatenar cadenas de
caracteres, dependiendo del contenido de las variables, los resultados pueden
ser inesperados. Por ello, para concatenar variables de este tipo utilizaremos
el operador &; ejecuta la
concatenación sin tener en cuenta qué contienen las variables.
Recuerde siempre dejar un
espacio entre el nombre de la variable y el operador &.
Si
intenta ejecutar una operación o función matemática sobre una variable Variant
que no contenga un valor numérico, ocurrirá un error. Para evitar esto,
utilice la función IsNumeric para
interrogar si dicha variable contiene un valor que pueda ser utilizado como un número.
Por ejemplo:
Dim Dato
Dato = “123”
If IsNumeric(Dato) Then
Dato = Dato + 1111
End If
Dato = Dato & “5”
Cuando
asignamos un valor numérico a una variable Variant,
VB utiliza la representación más compacta para registrar el valor.
Una
variable Variant no es una variable
sin tipo; más bien, es una variable que puede cambiar su tipo libremente.
Cuando usted quiere conocer el tipo de dato que almacena una variable Variant, utilice la función VarType.
Cada tipo de dato tiene asociado en VB un número entero que lo diferencia de
los demás.
|
0
- Empty |
1
- Null |
2
- Integer |
|
3
- Long |
4
- Single |
5
- Double |
|
6
- Currency |
7
- Fecha/Hora |
8
- String |
|
11
- Boolean |
17
- Byte |
|
VB
proporciona las funciones de conversión siguientes:
CBool(expresión)
conversión a un valor de tipo Boolean
CByte(expresión)
conversión a
un valor de tipo Byte
CCur(expresión)
conversión
a un valor de tipo Currency
CDate(expresión)
conversión a un valor de tipo Date
CDbl(expresión)
conversión a un valor de tipo Double
CDec(expresión)
conversión a un valor de tipo Decimal
CInt(expresión)
conversión a un valor de tipo Integer
CLng(expresión)
conversión a un valor de tipo Long
CSng(expresión)
conversión a un valor de tipo Single
CStr(expresión)
conversión a un valor de tipo String
CVar(expresión)
conversión a un valor de tipo Variant
Las
variables Variant también pueden
contener valores de tipo Date,
siempre se expresan incluidos entre #. Por ejemplo:
Dim Dato
Dato = #18-4-97 15:30#
Dato = #18-Apr, 1997 3:30#
Dato = #18-Apr-97#
Dato = #18 Apr 1997#
Para
verificar si un determinado valor puede considerarse como uno del tipo Date,
utilice la función IsDate.
Para
saber si una variable Variant no ha
sido iniciada, esto es, si está vacía, utilice la función IsEmpty. Una variable Variant
que contiene el valor Empty es 0 si
se usa en un contexto numérico, o una cadena de longitud cero (“”) si se
usa en un contexto de cadenas.
Para
indicar que una variable Variant
contiene un dato no válido, se utiliza el valor especial Null. Para verificare si la variable contiene este valos, utilice la
función IsNull.
El tipo STRING
Una
variable de tipo String permite
almacenar una cadena de caracteres y manipularla utilizando las funciones
proporcionadas por VB. Por ejemplo:
Private Sub Command1_Click()
Dim Nombre As String
Nombre = “Francisco Javier”
Nombre = Left(Nombre,4)
MsgBox Nombre
End Sub
La
variable Nombre está definida como
una cadena de longitud variable. Para declarar Nombre
como una cadena de longitud fija hagalo:
...
Dim Nombre As String * 60
...
En
el ejemplo anterior, si asignamos a Nombre
menos de 60 caracteres, se completa con espacios en blanco. En estos casos
pueden ser útiles las funciones Ltrim,
Rtrim y Trim, que
devuelven la cadena sin espacios a la izquierda, a la derecha o
a ambos lados.
En
un módulo estándar, las cadenas de longitud fija hay que declararlas Private o Public.
En un formulario o en una clase hay que declararlas Private.
Si
el contenido de una cadena coincide con un valor numérico, se puede asignar la
misma a una variable numérica. También es posible asignar un valor numérico a
una cadena. Por ejemplo:
Dim X As Integer, Y As Single
Dim Str As String
Y = 50.65
Str = Y
X = Str
El tipo BYTE
Cuando
una variable de tipo String es
convertida entre los formatos ANSI y Unicode,
cualquier dato binario en la variable resulta dañado. Entonces, si de una
variable sabe que va a contener datos binarios, declárela como una matriz de
tipo Byte; es este tipo los datos no
están sometidos a conversiones.
Tipo enumerado
La
declaración de un tipo enumerado es simplemente una lista de valores que puede
ser tomados por una variable de ese tipo. Los valores de un tipo enumerado se
representarán con identificadores, que serán las constantes del nuevo tipo.
Por ejemplo:
Public Enum DiasSemana
lunes
martes
miércoles
jueves
viernes
sábado
domingo
End Enum
Dim hoy As DiasSemana
Las
constantes son de tipo Long y sus
valores por omisión son 0, 1, 2, etc. Según esto el valor de lunes
es 0, martes es 1, y así
sucesivamente.
A
cualquier identificador de la lista se pe puede asignar un valor inicial por
medio de una expresión constante. Los identificadores sucesivos tomarán
valores correlativos a partir de éste. Por ejemplo:
Public Enum DiasLaborables
Sábado ‘ toma valor
0
domingo = 0
lunes
martes
miércoles
jueves
viernes
NoVálido = -1
End Enum
A
los tipos enumerados se les aplican las siguientes reglas:
·
Puede
declararse Private o Public.
·
De
forma predeterminada, la primera constante se inicia en 0 y las siguientes
reciben un valor superior en una unidad al de la constante anterior.
·
Dos
o más constantes pueden tener un mismo valor.
·
Para
evitar referencias ambiguas cuando se refiera a una constante individual,
califique el nombre de la constante mediante su enumeración. Por ejemplo: hoy =
DiasSemana.domingo
·
No
es posible leer o escribir un valor de un tipo enumerado; esto es, cuando se
escribe una variable de un tipo enumerado lo que se escribe es el valor
asociado, y cuando se lee, hay que introducir el valor asociado. En cambio en
asignaciones o en comparaciones sí se pueden utilizar los identificadores del
tipo enumerado.
Sentencias
Una
sentencia es una línea de texto que indica un o más operaciones a realizar.
Una línea puede tener varias sentencias, separadas unas de otras por dos
puntos:
total = cantidad * precio : suma
= suma + total
Una
sentencia puede escribirse en varias líneas utilizando el carácter de
continuación de línea (un espacio en blanco seguido del carácter de
subrayado) Por ejemplo:
PagoMensual = CantidadPrest * _
(Interes / (1 – (1 / ((1 + Interes) ^ Meses))))
La
sentencia más común es la de asignación. Su forma general es
variable = expresión
ENTRADA Y SALIDA DE
DATOS
Una
posibilidad de proveer de datos a una aplicación o de visualizar resultados es
utilizando cajas de diálogo. Las cajas de diálogo son ventanas con controles
que podemos visualizar en el instante en que necesitemos hacer una entrada o
salida de datos. VB tiene cajas de diálogo predefinidas que nos permiten
realizar operaciones de E/S.
Entrada de datos
En
VB, una forma de introducir un dato sería utilizando la caja de diálogo
provista por InputBox.
La
función InputBox visualiza una caja
de diálogo, con un mensaje que indica al usuario el tipo de información que
debe intriducir; devuelve como resultado un valor de tipo String
que se corresponde con el dato tecleado. Su sintaxis es:
InputBox(mensaje,
[título][, por_omisión][, posx][, posy])
Por
ejemplo:
x = InputBox(“Dato: ”) ‘x almacena el dato
introducido por el teclado
Si
el mensaje consiste en varias líneas, hay que introducir explícitamente al
final de cada una de ellas los caracteres de retorno de carro (Chr(13)) y avance de línea (Chr(10)).
Por ejemplo la sentencia
NomAp = InputBox(“Introduzca los apellidos y el
nombre.” & _
Chr(13) & Chr(10) & “Los apellidos en mayúsculas.”)
El
resto de los parámetros son opcionales. Si queremos omitir un argumento que
precede a otro especificado, hay que poner las correspondientes comas
delimitadoras. Por ejemplo:
X = InputBox(“Dato:”, , 0)
La
cadena título será visualizada en la
barra de título de la caja de diálogo; si se omite se pone como título el
nombre de la aplicación. La cadena por_omisión
especifica el texto que aparecerá en la caja de texto; si se omite, la caja de
texto aparecerá vacía. Los argumentos posx
y posy son las coordenadas donde
aparecerá la caja de diálogo, medidas desde la izquierda y desde la parte
superior de la pantalla, y expresadas en twip
(1/1440 pulgadas); si se omiten, la caja de diálogo se visualizará centrada
horizontalmente y a un tercio de la parte superior de la pantalla.
Ejercicio:
vamos a escribir una aplicación que nos permita introducir el nombre, el
apellido, la edad y la fecha de nacimiento de una persona. Una vez
introducidos los datos, simplemente los visualizaremos sobre el formulario.
Salida de datos
Según
hemos visto, el método Print
visualiza datos en un formulario. Así mismo, permite visualizar datos en una
caja de imagen (PictureBox) o en una
impresora (Printer). Su sintaxis es:
objeto.Print lista de expresiones
Donde
lista de expresiones es un conjunto de
expresiones numéricas y alfanuméricas separadas por comas, espacios en blanco
o puntos y comas. Las constantes de caracteres deben ponerse entre comillas. Por
ejemplo:
Print a + 5, a * b / 2, c$,
“Fin”
Print x; y + 5; w
Print n; m
Print “LISTADO DE RESULTADOS”
Si
se omite la lista de expresiones, se visualiza una línea en blanco.
La
interrogación (?) puede utilizarse
como un modo abreviado de introducir Print.
Por ejemplo:
? a; b
No
obstante, cuando el corrector sintáctico comprueba la sintaxis de la sentencia
anterior, sustituye automáticamente el símbolo ?
por Print.
La
posición de cada elemento a visualizar está determinada por la puntuación
utilizada para separar los elementos en la lista de expresiones. VB divide la línea
en zonas de 14 espacios cada una, cuando se utiliza como separador una coma. En
la lista de expresiones, una como produce un salto al inicio de la zona
siguiente. Un punto y coma produce la visualización de la expresión,
inmediatamente después de la última visualizada. Por ejemplo:
Print “ 1
2
3”
Print
“12345678901234567890123456789012345”
a = 5
Print a; a^2; a * (-5)
Print a, a^2, a * (-5)
Print “FIN DEL PROCESO”
Cuando
una coma o punto y coma terminan la lista de expresiones, es decir, se escriben
al final de la línea, el siguiente método Print
continuará escribiendo sobre la misma línea, en caso contrario se efectuará
un salto al inicio de la línea siguiente. Por ejemplo:
a = 50
Print a,
A = a * -2
Print a
Print
Print “FIN “;
Print “DEL PROCESO”
Visualizar datos sobre un
objeto
El método
Print ¿sobre qué objeto visualiza
los datos? La respuesta es: sobre el objeto para el que es invocado.
Como
ejemplo, vamos a modificar la aplicación que creamos y vamos a añadir al
formulario un control PictureBox para
que los resultados sean visualizados sobre dicho control. Cambie sus propiedades
AutoRedraw a True y BackColor a blanco. Después cambie la propiedad BackColor
del formulario a “cara del botón”.
Posiciones de impresión
Función Spc
Inserta
n espacios antes de imprimir la
expresión especificada a continuación. Su sintaxis es:
Spc(n)
Spc solo puede utilizarse con Print.
Si Spc está al final de la lista de expresiones, no se produce un
retorno de carro. Por ejemplo:
n$ =
InputBox(“Nombre y apellidos:”)
edad
= InputBos(“Edad:”)
Print
Spc(12); “NOMBRE”; Spc(16); “EDAD”
Print
“----------------------------------------------------------------------”
Print
n$; Spc(11); edad
Función Tab
Indica
la posición n (columna) donde se
desea que comience la impresión de una determinada expresión. Su sintaxis es:
Tab(n)
Tab sólo puede utilizarse con
sentencias Print. Si la posición de
impresión actual es superior a la indicada por n,
entonces Tab indica la posición n
en la siguiente línea. La posición más baja es la 1. Si Tab
está al final de la lista de expresiones, no se produce un retorno de
carro. Por ejemplo:
n$ =
InputBox(“Nombre y apellidos:”)
edad
= InputBos(“Edad:”)
Print
Tab(13); “NOMBRE”; Tab(35); “EDAD”
Print
“----------------------------------------------------------------------”
Print
n$; Tab(35); edad
Dando formato a la salida
La
función Format permite dar formato a
la salida de acuerdo con un patrón especificado: Print
Format(Entrada, Patrón).
Por ejemplo:
Print
Format(n, “#,##0.00”)