[Indice]


Visual Basic Script

Bajo esta denominación Microsoft presenta una versión del lenguaje de programación Visual Basic, especialmente preparada para conectar con ASP. El conjunto de los objetos de ASP y VBScript permite programar aplicaciones internet para el IIS (Information Internet Server) también de Microsoft.

VBScript no tiene todas las funcionalidades de Visual Basic, por ejemplo, carece de funciones intrínsecas de acceso a ficheros o a bases de datos, de ahí la necesidad de recurrir a los objetos propios de ASP para determinadas tareas; algunos comandos están modificados respecto a su original en Visual Basic para lograr una mejor conexión con ellos.

Todo lo dicho respecto a cómo se escribe el ASP es válido para VBScript, y como ya has visto en los temas sobre los objetos de ASP, se pueden mezclar ambas cosas como mejor convenga.

VBScript no está reservado exclusivamente para ser utilizado en páginas ASP que se ejecutan en el servidor, también puede utilizarse en páginas HTML para que sean ejecutadas en el navegador. El único problema es que solamente los navegadores de Microsoft (Internet Explorer) son capaces de interpretarlo. Esta es sin duda la gran virtud de ASP: no importa qué navegador tiene el cliente, ya que sólo se le envía HTML estándard. Por ahora, el único lenguaje de comandos compatible con todos los navegadores modernos es Java Script, aunque existen algunas incompatibilidades entre versiones.

Por tipos de comandos, en VBScript tenemos:

En VBScript existen dos niveles de ejecución de comandos: el nivel de procedimiento, que contiene instrucciones dentro de procedimientos Function (funciones) o Sub (sub rutinas), y el nivel de secuencia de comandos que consiste en cualquier código escrito fuera de un procedimiento. Es decir, que el nivel de secuencia de comandos contiene al nivel de procedimientos, y un procedimiento no puede estar dentro de otro procedimiento. Un procedimiento si puede llamar a otro procedimiento, y por supuesto, pueden ser llamados desde el nivel de secuencia de comandos. En el siguiente ejemplo, que contiene los dos niveles, puede verse como desde el nivel de secuencia de comandos se llama a un procedimiento Sub, que a su vez invoca una función:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Public Sub Rutina_hora
  Response.Write( Time() )
End Sub
</SCRIPT>

<HTML>
<HEAD><TITLE>Prueba de ASP</TITLE></HEAD>
<BODY>
Bienvenidos al ASP. Son las <% Call(Rutina_hora) %>
</BODY>
</HTML>

VBScript no aporta procedimientos Sub propios, que deberán ser creados por el usuario, pero si posee gran cantidad de procedimientos Function intrínsecos que se verán en el apartado "Funciones".

Procedimientos Sub

Un procedimiento Sub es una serie de comandos VBScript, escritos entre una instrucción Sub y otra End Sub, que ejecutan acciones pero no devuelven ningún valor, cosa que si hacen las funciones, que en cambio, no ejecutan acciones. Como puedes ver en el ejemplo anterior, el procedimiento Rutina_hora no devuelve valor alguno; se limita a llamar al objeto Response de ASP para presentar en pantalla un valor que no produce él mismo, sino la función Time().

Un procedimiento Sub puede tener argumentos, es decir, unos valores o parámetros iniciales necesarios para ejecutar sus instrucciones. Estos valores pueden proceder de constantes, variables o expresiones que a su vez podrían obtener los datos por una llamada a otro procedimiento. Por ejemplo, imagina un procedimiento que busca un registro en una base de datos; lógicamente necesitaría, por lo menos, un argumento con el identificador del registro a buscar.

Los procedimientos Sub, de forma predeterminada, son públicos si no se indica lo contrario. Para cambiar eso se escribe la instruccion Public o Private delante del nombre del procedimiento. Un procedimiento público es visible a todos los otros procedimientos en la secuencia de comandos. El valor de las variables locales en un procedimiento Sub no se mantiene entre llamadas al procedimiento.

No se puede definir un procedimiento Sub dentro de otro procedimiento Sub o Function. Si es necesario programar una salida del procedimiento sin ejecutar todas sus instrucciones, como por ejemplo, cuando se produce un error, se utiliza la instrucción Exit Sub. Se pueden escribir cuantas instrucciones Exit Sub sean necesarias.

Después de ejecutar un procedimiento Sub (o después de abandonarlo sin ejecutar por la razón que sea) la ejecución del programa continua con la instrucción que sigue a la que llamó el procedimiento.

Se puede llamar a un procedimiento Sub de dos maneras: simplemente escribiendo su nombre seguido de los argumentos, si los hay, o utilizando la instrucción Call(). No está muy claro para qué sirve esta instrucción en el caso de los procedimientos Sub, ya que funcionan igual. La única diferencia consiste en que si no se utiliza Call(), los argumentos van al lado del nombre del procedimiento sin más, y si se utiliza hay que escribirlos dentro de un par de paréntesis. Yo la utilizo por costumbre, ya que en otros lenguajes de programación si es necesaria.

Un procedimiento Sub puede llamarse a sí mismo cuantas veces sea necesario. Utilizar esto con precaución, ya que si falla algo, o no está adecuadamente programado, entraría en un bucle infinito y se puede colapsar el servidor.

Procedimientos Function

Un procedimiento Function, o simplemente función, es una serie de comandos VBScript, escritos entre una instrucción Function y otra End Function, que devuelven un valor.

Los procedimientos Function, igual que los Sub, de forma predeterminada, son públicos si no se indica lo contrario. Para cambiar su alcance se escribe la instruccion Public o Private delante del nombre del procedimiento. Un procedimiento público es visible a todos los otros procedimientos en la secuencia de comandos. El valor de las variables locales en un procedimiento Function no se mantiene entre llamadas al procedimiento.

No se puede definir un procedimiento Function dentro de otro procedimiento Function. Si es necesario programar una salida del procedimiento sin ejecutar todas sus instrucciones, como por ejemplo, cuando se produce un error, se utiliza la instrucción Exit Function. Se pueden escribir cuantas instrucciones Exit Function sean necesarias.

Después de ejecutar un procedimiento Function (o después de abandonarlo sin ejecutar por la razón que sea) la ejecución del programa continua con la instrucción que sigue a la que llamó el procedimiento. Dado que las funciones devuelven valores, si por cualquier causa la función ha fallado, se debe tener previsto, ya que no aportará el valor esperado. Una función numérica, en caso de fallo devolverá cero (0), una de cadena un string de longitud cero (""), y una función que devuelve una referencia a un objeto, devuelve Nothing.

Un procedimiento Function puede tener argumentos, al igual que los procedimientos Sub. Si no tiene argumentos, se deberá incluir un par de paréntesis vacios junto al nombre, como puedes ver en el ejemplo de arriba, donde se invoca a la función Time(). Las funciones devuelven un valor asignándolo a su propio nombre en el código del procedimiento. El tipo de datos devuelto por un procedimiento Function siempre es Variant, lo que permite utilizar la función en cualquier expresión o entorno adecuados. El tipo de datos de los argumentos puede ser distinto del tipo devuelto por la función.

Se puede llamar a una función de dos maneras: simplemente escribiendo su nombre seguido de los argumentos, si los hay, o utilizando la instrucción Call(). Tampoco está muy claro para qué sirve esta instrucción, como en el caso de los procedimientos Sub, ya que funcionan igual. La única diferencia consiste en que si no se utiliza Call(), los argumentos van al lado del nombre del procedimiento sin más, y si se utiliza, hay que escribirlos dentro de un par de paréntesis.

Al igual que los procedimientos Sub, una función puede llamarse a sí misma, y a otras funciones, pero no puede llamar a un procedimiento Sub.

Veamos un ejemplo de escritura de una función definida por el usuario:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Public Function Letra_NIF(DNI)

    Const Letras = "TRWAGMYFPDXBNJZSQVHLCKE"
    Letra_NIF = Mid(Letras, 1 + (DNI Mod 23), 1)

End Function
</SCRIPT>

<HTML>
<HEAD><TITLE>Prueba de ASP y VBScript</TITLE></HEAD>
<BODY>
<% Response.Write "La letra del DNI 11111111 es: " & Letra_NIF(11111111) %>
</BODY>
</HTML>

Y este sería el resultado:

La letra del DNI 11111111 es: H

Como puedes ver, es muy simple: se comienza definiendo el nombre de la función: Letra_NIF() y su argumento: DNI. Eso significa que es necesario darle un valor al argumento DNI para que pueda trabajar la función. El procedimiento que realiza nuestra función para obtener el valor buscado consiste en dividir el argumento DNI entre 23 y obtener el resto (Mod). Ese resto, se utiliza como segundo argumento de otra función que proporciona VBScript: Mid(), que sirve para extraer un sub string de una cadena de texto. La función Mid() utiliza tres argumentos: en primer lugar el nombre de la cadena sobre la que hay que buscar, en este caso Letras; después hay que darle el número de posición donde comenzará el sub string, en este caso la letra H, que está en la posición 19 de la cadena; y por último, el tercer argumento indica cuantos caracteres hay que extraer de la cadena comenzando en la posición que indica el segundo argumento, y que en este caso es 1.

Ya tenemos la letra buscada. Ahora sólo hay que asignarla a algo para que se pueda obtener desde donde sea necesario, y para ello la asignaremos al nombre de la propia función, que actuará como si fuese una variable cualquiera:

    Letra_NIF = Mid(Letras, 1 + (DNI Mod 23), 1)

Seguramente te preguntarás porqué hay que sumarle 1 al resultado de la división (DNI Mod 23). Ello se debe a que Mid() comienza a contar por el cero, lo que nos daría la letra V en lugar de la H, que es la correcta, si utilizamos el valor tal como se obtiene.


[Indice]