[Indice]


Constantes y variables...

...y algunas instrucciones

Se puede definir una constante como un nombre significativo que contiene un valor, numérico, texto o de cualquier tipo, y que una vez definida, no cambia. Las constantes puede ser intrínsecas, es decir con nombres y valores preestablecidos en VBScript, como por ejemplo vbCrLf cuyo valor es equivalente a Chr(13) & Chr(10), o lo que es lo mismo, retorno de carro y avance de línea. También tenemos las constantes definidas por el usuario, que son aquellas que reciben el nombre y valor que el usuario decida. Por supuesto, no puedes crear una constante con el mismo nombre de una intrínseca, ni dos cualesquiera con el mismo nombre, aunque sí con el mismo valor. Por ejemplo:

<%
Const xxMiConstante = "Esto es un string constante"
Const xxDia = 28
Const xxFecha = #02-28-2000#
%>

Y para ver sus contenidos:

<%
Response.Write( xxMiConstante & "<BR>")
Response.Write( xxDia & "<BR>")
Response.Write( xxFecha & "<BR>")
%>

Y este sería el resultado:

Esto es un string constante
28
02-28-2000

Fíjate que para crear estas constantes definidas por el usuario, primero hay que escribir la instrucción Const. Si simplemente escribimos xxDia = 28 acabamos de crear una variable, que viene a ser lo mismo, pero cuyo contenido, como su nombre indica, puede variarse en cualquier momento. También habrás visto que a todas ellas se les ha antepuesto xx delante del nombre. En efecto, el nombre de las constantes definidas por el usuario es libre, pero es buena idea acostrumbrarse a utilizar una forma de nombre que permita distinguir después, a simple vista, qué es una constante y qué una variable. Todas las constantes intrínsecas, por ejemplo, comienzan con vb.

Los nombres de variables y constantes tienen que comenzar siempre por una letra, no pueden contener un punto, y deben tener menos de 255 caracteres. VBScript no distingue entre mayúsculas y minúsculas como hace JavaScritpt. Así, se considerará la misma variable MiVariable que mivariable o MIVARIABLE. Otra cosa importante es no dejar espacios en blanco en los nombres de variables o constantes. Por ejemplo, el nombre de variable "Mi variable" te dará problemas. Si quieres utilizar varias palabras para construir el nombre, debes usar un signo de continuidad, por ejemplo el subrayado: Mi_Variable. No es recomendable usar el guion o la barra inclinada, que pueden ser confundidos en algunos casos con operadores matemáticos.

Recuerda que tanto a la hora de definir constantes como variables, sus valores, si son textos, deben ir entre comillas dobles ("..."), las fechas y horas entre (#...#) y los números sin nada. No olvides tampoco que el formato de fecha en VBScript es mm/dd/aaaa, formato americano, en lugar del europeo dd/mm/aaaa.

Como ya has visto, al definir una constante, junto con el nombre se le asigna un valor, lo que implica que la constante tiene un tipo de datos invariable. No sucede lo mismo con las variables, que por defecto tienen el tipo de datos Variant propio de Visual Basic, lo que les permite recibir cualquier tipo de dato durante el proceso sin necesidad de redefiniciones adicionales. Aunque puede omitirse, es conveniente utilizar la instrucción Dim para definir variables. Por ejemplo:

<%
Dim MiVariable

MiVariable = "Esto es un string constante"
MiVariable = 28
MiVariable = #02-28-2000#
%>

Puede definirse más de una variable en una misma línea con Dim. Así:

<%
Dim Variable1, Variable2, Variable3
%>

Estos son los tipos de datos existentes en VBScript:

Si a cualquiera de estos tipos de datos le anteponemos vb, por ejemplo vbArray, obtendremos los nombres de las constantes intrínsecas devueltas por la función VarType(MiVariable), que se utiliza para saber qué tipo de datos contiene una variable en un momento determinado, aunque lo que devuelve la función es el valor numérico de la constante (el número que aparece entre paréntesis junto a cada nombre de tipo). También puede utilizarse la función TypeName(MiVariable) para obtener el nombre del tipo.

En el momento de crearlas, y antes de darles valor, es decir, cuando se inicializan, las variables numéricas se inicializan con 0 y una de cadena (string) se inicializa con una cadena de longitud cero ("" tipo de dato 0) que no hay que confundir con el valor Null (tipo de dato 1) de las bases de datos, ni con un espacio en blanco (tipo de dato 8). Para controlar si una variable está vacía o no, existe la función IsEmpty(MiVariable), que devuelve True o False según el contenido de la variable.

Otra cosa importante de las constantes y variables es su radio de acción o alcance. El alcance de una constante o una variable se refiere a desde donde será posible invocarla una vez definida. Para definir el alcance, se utilizan dos instrucciones: Private (por defecto para las variables) y Public (por defecto para las constantes). La primera limita la variable o constante a la secuencia de comandos donde es definida, y la segunda permite utilizarlas desde cualquier secuencia de comandos. Como nivel de secuencia de comandos, se entiende cualquier código que esté fuera de un procedimiento Function o Sub. Las variables definidas dentro de un procedimiento tienen su alcance limitado a ese procedimiento. He aquí un ejemplo de definición de variable:

<%
Public Dim MiVariable

MiVariable = 28
%>

Hasta aquí hemos visto variables que contienen un solo valor (variables escalares), pero pueden definirse de forma que almacenen 2 o más valores. Este tipo de variables se denominan variables matriciales o dinámicas, y se definen igual que las escalares, pero escribiendo un par de paréntesis delante del nombre. Si dentro de los paréntesis escribimos un número, éste indicará cuantos valores puede almacenar la variable. Si no se escribie ningun número, la variable queda definida sin dimensionar, y se puede establecer sus dimensiones más tarde con la instrucción ReDim. Por ejemplo:

<%
Dim MiVariable()
...
...
ReDim MiVariable(5)
%>

Una variable dinámica se puede redimensionar cuantas veces sea necesario, pero solamente se puede cambiar el número de elementos, no su estructura. En el ejemplo anterior se ha definido una matriz de una dimensión y 5 elementos, lo que significa que puede almacenar 5 valores. Para ello solo hay que asignar un valor a cada entrada del índice comenzando por el cero:

<%
Dim MiVariable()
...
...
ReDim MiVariable(4)

Mivariable(0) = 10
Mivariable(1) = 20
Mivariable(2) = 30
Mivariable(3) = 40
Mivariable(4) = 50
%>

La asignación de valores o la lectura de los mismos, también se puede hacer mediante un bucle típico For To Next. Como se ha dicho, una vez dimensionada, se puede cambiar el número de elementos, pero no sus dimensiones, es decir, que no se puede convertir a, por ejemplo, MiVariable(4, 4) que es una variable de 5 dimensiones y cinco elementos.

Las matrices de dos dimensiones se pueden comparar con tablas de datos, donde el primer número, en este caso el 4, indica el número de filas y el segundo indicaría el número de columnas. Si no hay segundo número, por defecto se entiende que es cero, lo que indica una sola columna. Otra cosa que no se puede cambiar es el tipo de datos, que es único para todos los valores de la matriz, es decir, que si el primer valor asignado es numérico, todos los demás deberán ser del mismo tipo.

Hay que tener en cuenta, que si hay valores cargados en una matriz y la redimensionamos, los valores se pierden. Para evitar esto, VBScript dispone de la palabra clave Preserve para conservar el contenido de la matriz cuando se produce el cambio de tamaño. No obstante, utilizando Preserve sólo se puede cambiar el tamaño de la última dimensión de la matriz y tampoco se puede cambiar el número de dimensiones. Por ejemplo, si la matriz sólo tiene una dimensión, se puede cambiar el tamaño de esa dimensiónn ya que es la última y única dimensión.

Si la matriz tiene dos o más dimensiones, sólo se puede cambiar la dimensión de la última y todavía conservar el contenido de la matriz. Por ejemplo:

<%
ReDim MiVariable(4, 4, 4)
....
....
ReDim MiVariable(4, 4, 5) %>

Para liberar la memoria asignada a matrices dinámicas, se utiliza la instrucción Erase. Después de utilizar Erase, si se quiere hacer referencia de nuevo a la matriz, es necesario volver a declarar las dimensiones de las variables de la matriz con la instrucción ReDim. Hay que tener presente que Erase no recupera la memoria asignada a las matrices de tamaño fijo, solamente de las dinámicas. Si es fija, lo que hace es borrar los valores que contenga, cambiándolos por 0 si es numérica, por "" si es de texto y por Nothing si es una matriz de objetos.

Una variable multidimensional puede tener hasta 60 dimensiones, cosa bastante complicada de utilizar. Hay que usar la redimensión de matrices con cuidado, ya que todo esto se hace en memoria. Si se escribe una aplicación con muchas matrices dinámicas, cuyos valores máximos no esten debidamente controlados, y hay muchos usuarios utilizando la aplicación, el servidor puede quedarse sin recursos. No hay que olvidar tampoco que las matrices de datos no son el sustituto de una DB.

Para asignar un objeto a una variable, hay que anteponer la instrucción Set. Al asignar una referencia de objeto a una variable, no se crea una copia del objeto, se crea una referencia al objeto. Se puede definir más de una variable con referencia al mismo objeto. Debido a que estas variables son referencias al objeto (y no copias de él), cualquier cambio ocurrido en el objeto se refleja en todas las variables que se refieren al mismo.


[Indice]