Una variable es una ubicación de almacenamiento con nombre dentro de la memoria del equipo que contiene datos, como un número o una cadena de texto. A los datos contenidos en una variable se les llama valor de la variable. Las variables ofrecen una manera de almacenar, recuperar y manipular valores mediante nombres que ayuden a entender lo que hace la secuencia de comandos.
Declarar y asignar nombre a variables
Siga las reglas y recomendaciones de su lenguaje de secuencias de comandos a la hora de declarar variables y asignarles nombres. Incluso aunque no necesita declarar una variable para poder utilizarla, es conveniente hacerlo porque ayuda a prevenir errores. Declarar una variable significa indicar al motor de secuencias de comandos que existe una variable con un nombre concreto, de forma que pueda hacer referencia a la variable a lo largo de una secuencia de comandos.
VBScript
VBScript no necesita declaraciones de variables, pero es conveniente declarar todas las variables antes de utilizarlas. Para declarar una variable en VBScript, utilice la instrucción Dim, Public o Private. Por ejemplo: <% Dim NombreUsuario %>
Puede utilizar la instrucción Option Explicit de VBScript en los archivos .asp para hacer obligatoria la declaración de variables con las instrucciones Dim, Private, Public y ReDim. La instrucción Option Explicit debe aparecer después de las directivas ASP y antes del texto HTML o de los comandos de la secuencia de comandos. Esta instrucción sólo afecta a los comandos ASP escritos en VBScript; no afecta a los comandos escritos en JScript.
<% Option Explicit %>
<HTML>
<%
Dim strNombreUsuario
Public lngNumeroCuenta
%>
Alcance de las variables
El alcance, o vida, de una variable determina qué comandos de secuencia de comandos pueden tener acceso a dicha variable. Una variable declarada dentro de un procedimiento tiene alcance local; la variable se crea y se destruye cada vez que se ejecuta el procedimiento. No se puede tener acceso a ella desde fuera del procedimiento. Una variable declarada fuera de un procedimiento tiene alcance global; su valor es accesible y modificable desde cualquier comando de secuencia de comandos de una página ASP.
Nota Al limitar el alcance de la variable a un procedimiento mejorará el rendimiento.
Si declara variables, una variable local y una variable global pueden tener el mismo nombre. La
modificación del valor de una de ellas no afecta al valor de la otra. Sin embargo, si no declara las
variables, podría modificar inadvertidamente el valor de una variable global. Por ejemplo, los siguientes comandos de secuencia de comandos devuelven el valor 1 incluso aunque haya dos variables llamadas Y:
<%
Option Explicit
Dim Y
Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
Por el contrario, los comandos siguientes devuelven el valor 2 porque las variables no se han declarado de forma explícita. Cuando la llamada al procedimiento asigna a Y el valor 2, el motor de secuencias de comandos da por supuesto que el procedimiento pretende modificar la variable global:
<%
Option Explicit
Dim Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
Para evitar problemas, adquiera el hábito de declarar explícitamente todas las variables. Lo cual es especialmente importante si utiliza la instrucción #include para incluir archivos en su archivo ASP. La secuencia de comandos incluida está contenida en un archivo aparte, pero se trata como si formara parte del archivo contenedor. Es muy fácil olvidarse de que hay que utilizar nombres de variables diferentes en la secuencia de comandos principal y en la secuencia de comandos incluida, a menos que declare las variables.
Asignar a las variables alcance de sesión o de aplicación
Las variables globales sólo son accesibles en un mismo archivo ASP. Para hacer que una variable sea accesible en varias páginas, asigne a la variable alcance de sesión o de aplicación. Las variables con alcance de sesión están disponibles en todas las páginas de una aplicación ASP que pida un mismo usuario. Las variables con alcance de aplicación están disponibles en todas las páginas de una aplicación ASP que pida cualquier usuario. Las variables de sesión son una buena manera de almacenar información para un único usuario, como sus preferencias o el nombre o la identificación del usuario. Las variables de aplicación son una buena manera de almacenar información para todos los usuarios de una determinada aplicación, como los saludos específicos o los valores generales necesarios en la aplicación.
ASP proporciona dos objetos integrados en los que puede almacenar variables: el objeto Session y el objeto Application.
También puede crear instancias de objetos con alcance de sesión o de aplicación. Para obtener más información, consulte Establecer el alcance de los objetos.
Alcance de sesión
Para asignar alcance de sesión a una variable, almacénela en el objeto Session asignando un valor a una entrada con nombre del objeto. Por ejemplo, los siguientes comandos almacenan dos nuevas variables en el objeto Session:---<%---Session("Nombre") = "Juan"
Session("Apellido") = "Soto"
%>
Para recuperar la información del objeto Session, tenga acceso a la entrada con nombre mediante la directiva de resultado (<%=) o Response.Write. En el ejemplo siguiente se utiliza la directiva de resultado para presentar el valor actual de Session("Nombre"): Reciba nuestra bienvenida,<%= Session("Nombre") %>
Puede almacenar las preferencias del usuario en el objeto Session y después tener acceso a dichas preferencias para determinar qué página hay que devolver al usuario. Por ejemplo, puede permitir que los usuarios especifiquen la versión en texto del contenido de la primera página de la aplicación y aplicar esta opción a las siguientes páginas de la aplicación que el usuario visite.
<%
strScreenResolution = Session("ScreenResolution")
If strScreenResolution = "Low" Then
%>
Ésta es la versión de texto de la página.
<% Else %>
Ésta es la versión multimedia de la página.
<%End If %>
Nota Si hace referencia a una variable con alcance de sesión más de una vez en una secuencia de comandos, piense en asignarle una variable local, como en el ejemplo anterior, para mejorar el rendimiento.
Alcance de aplicación
Para asignar alcance de aplicación a una variable, almacénela en el objeto Application asignando un valor a una entrada con nombre del objeto. Por ejemplo, el comando siguiente almacena en el objeto Application un saludo específico de una aplicación:
<% Application("Saludo") = "¡Reciba nuestra bienvenida al Departamento de ventas!" %>
Para recuperar la información del objeto Application, utilice la directiva de resultado de ASP (<%=) o Response.Write para tener acceso a la entrada con nombre desde cualquier página posterior de la aplicación. En el ejemplo siguiente se utiliza la directiva de resultado para presentar el valor de Application("Saludo"): <%= Application("Saludo") %>
De nuevo, si hace referencia a una variable con alcance de aplicación en su secuencia de comandos repetidamente, debe de asignarle una variable local para mejorar el rendimiento.
Utilizar constantes
Una constante es un nombre que representa un número o una cadena. Algunos de los componentes de base que se proporcionan con ASP, como ActiveX Data Objects (ADO), definen constantes que se pueden utilizar en las secuencias de comandos. Un componente puede declarar constantes en la biblioteca de tipos del componente, un archivo que contiene información acerca de los objetos y los tipos aceptados por un componente COM. Después de haber declarado una biblioteca de tipos en su archivo .asp puede usar las constantes definidas en cualquier secuencia de comandos en el mismo archivo .asp.
Igualmente, puede declarar una biblioteca de tipos en el archivo Global.asa para usar las constantes definidas en cualquier archivo .asp de la aplicación.
Para declarar una biblioteca de tipos, utilice la etiqueta <METADATA> en su archivo .asp o Global.asa. Por ejemplo, para declarar la biblioteca de tipos de ADO, utilice las siguientes instrucciones:
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib"
UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
O bien, en lugar de hacer referencia al identificador único universal (UUID) de la biblioteca de tipos, puede hacer referencia a la biblioteca de tipos mediante la ruta del archivo:
<!-- METADATA TYPE="typelib" FILE="c:\program files\common files\system\ado\msado15.dll"-->
Entonces puede usar las constantes ADO en el archivo .asp donde declaró la biblioteca de tipos o en un archivo que reside en una aplicación que contiene un archivo Global.asa con la declaración de biblioteca de tipos ADO. En el ejemplo siguiente, adOpenKeyset y adLockOptimistic son constantes ADO:
<%
'Crea y abre el objeto Recordset.
Set rsCustomersList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
En la siguiente tabla se enumeran las bibliotecas de tipos y los identificadores UUID que se utilizan con más frecuencia:
Biblioteca de tipos UUID
Biblioteca de Microsoft ActiveX Data
Objects 2.5
{00000205-0000-0010-8000-00AA006D2EA4}
Biblioteca de Microsoft CDO 1.2 para
Windows 2000 Server
{0E064ADD-9D99-11D0-ABE5-00AA0064D470}
Biblioteca MSWC de objetos
Advertisement Rotator
{090ACFA1-1580-11D1-8AC0-00C0F00910F9}
Biblioteca MSWC de objetos de
registro de IIS
{B758F2F9-A3D6-11D1-8B9C-080009DCC2FA}
Interactuar con secuencias de comandos del cliente
Es posible aumentar la eficacia de ASP si se utiliza para generar o manipular secuencias de comandos del cliente. Por ejemplo, puede escribir secuencias de comandos del servidor que construyan secuencias de comandos del cliente basadas en variables específicas del servidor, el tipo del explorador o los parámetros de la petición HTTP.
Si intercala instrucciones de secuencias de comandos del servidor en las secuencias de comandos del cliente (delimitadas mediante etiquetas HTML <SCRIPT>), como se muestra en la plantilla del ejemplo siguiente, puede inicializar de forma dinámica y alterar las secuencias de comandos del cliente en el momento de realizar la petición:
<SCRIPT LANGUAGE="VBScript">
<!
variable = <%=valor definido por el servidor %>
.
.
.
secuencia de comandos del cliente
<% secuencia de comandos del servidor que se utiliza para generar una instrucción del cliente %>
secuencia de comandos del cliente
.
.
.
>
</SCRIPT>
Al incorporar estas funciones es posible crear algunas aplicaciones útiles e interesantes. Por ejemplo, ésta es una sencilla secuencia de comandos del servidor (escrita en VBScript) que manipula una secuencia de comandos del cliente (escrita en JScript):
<%
Dim dtmTime, strServerName, strServerSoftware, intGreeting
dtmTime = Time()
strServerName = Request.ServerVariables("SERVER_NAME")
strServerSoftware = Request.ServerVariables("SERVER_SOFTWARE")
'Genera un número aleatorio.
Randomize
GreetCondition = int(rnd * 3)
%>
<SCRIPT LANGUAGE="JScript">
<!
Llama a la función para mostrar el saludo
showIntroMsg()
function showIntroMsg()
{
switch(<%= intGreeting %>)
{
case 0:
msg = "Este es el servidor Web <%= strServerName%> con <%= strServerSoftware %>."
break
case 1:
msg = "Reciba nuestra bienvenida al servidor Web <%= strServerName%>. La hora local es <%=
dtmTime %>."
break
case 2:
msg = "Este servidor utiliza <%= strServerSoftware %>."
break
}
document.write(msg)
}
>
</SCRIPT>