![]() |
Manual de Visual Basic Script |
Manual por: DesarrolloWeb.com "Tu mejor ayuda para aprender a hacer webs" |
Versión
on-line: http://www.desarrolloweb.com/manuales/1 |
<script
language="VBScript"
> ---Aqúi pondremos nuestros scripts--- </script> |
<html> <body> |
<HTML> <HEAD> <TITLE>Ejemplo2 Comentario, caja alert y variables</TITLE> </HEAD> <BODY> <script language=VBScript> 'Esto es un comentario PEPE="HOLA" msgbox(pepe) pepe=3456 'NO importan las mayusculas-minusculas msgbox(PEPE) </script> </BODY> </HTML> |
<html> <head> <title>Escript de ejecución directa</title> </head> <body> Según se carga la página vamos a ver la versión del navegado en una caja de diálogo. <script language=vbscript> msgbox(navigator.appVersion) </script> </body> </html> |
<html> |
Una variable se declara utilizando la palabra DIM, veamos cómo:
<script
language="vbscript"> dim mi_nueva_variable 'Ahora ya existe la variable 'Seguidamente voy a hacer uso de ella mi_nueva_variable = "Valor de la variable" </script> |
Como se ha de recordar no importa que tipo de información va a contener la
variable, siempre se declaran igual.
Option explicit
Se puede
utilizar la clausula Option explicit para forzar la declaración de
variables en nuestros scripts. Si deseas evitar la posible fuente de errores que
supone la libertad de no declarar las variables puedes utilizar esta clausula y
hará que tus scripts respondan con mensajes de error si utilizas una variable
que no has declarado previamente. Veamos su uso con un ejemplo:
<HTML> <HEAD> <TITLE>Option explicit</TITLE> </HEAD> <BODY> <script language=vbscript> option explicit dim Pepe pepe = 3 tomas = 87 </script> </BODY> </HTML> |
Este script responderá con un mensaje de error cuando se ejecute, pues la
variable tomas no se ha declarado antes de su uso.
Informe de Miguel Angel Alvarez
Director
desarrolloweb.com
Mail: eugim@desarrolloweb.com
Tipos de datos
Visual Basic Script
posee varios tipos de datos pero en la práctica sólo posee un tipo de variable,
que va cambiando de un estado a otro según la información que introducimos
dentro. Este tipo principal de datos es el tipo Variant, en él
podemos introducir varios subtipos de datos con total libertad.
Para cambiar el subtipo de un variant, sólo tenemos que introducir un dato en
la variable. La variable variant cambia automáticamente de un subtipo a otro,
sin que tengamos que hacer ninguna operación adicional. Los distintos subtipos
de datos que tenemos son los siguientes:
Booleano |
Es un tipo de datos que contiene un si o un no. |
Byte | Numérico, entero sin signo hasta 65.000 |
Currency | Tipo de moneda, se utiliza para manipular de manera exacta valores monetarios, y en general cualquier cálculo que requiera una precisión de hasta 15 dígitos decimales |
Fecha | Es un tipo de 64 bits de tamaño que almacena fechas. Se utiliza el formato americano: mes, día, hora. |
Double | Coma flotante con doble precisión (64 bits) |
Entero |
Número entero, con signo. |
Entero largo | Este tipo es un valor entero con signo de doble precisión. Como los nuevos ordenadores trabajan con palabras de 32 bits, y no menos, se recomienda usar este tipo antes de el tipo entero normal. |
Objeto | El subtipo de objeto es una referencia de puntero de 32 bits a una
instancia de de objeto de automatización OLE. Los controles Active-X y
java. Utilizan esta
sintaxis: Set miobjeto = new oleObjeto |
Single | Coma flotante de precisión simple |
Cadena | Conjunto continuo de valores de caracteres, de longitud variable. |
v1 = 3 document.write VarType (v1)En este script declaramos una variable y le metemos un número y a continuación imprimimos en la página el valor que devuelve la función VarType.
Constant | Value | Description |
---|---|---|
vbEmpty | 0 | Empty (uninitialized) |
vbNull | 1 | Null (no valid data) |
vbInteger | 2 | Integer |
vbLong | 3 | Long integer |
vbSingle | 4 | Single-precision floating-point number |
vbDouble | 5 | Double-precision floating-point number |
vbCurrency | 6 | Currency |
vbDate | 7 | Date |
vbString | 8 | String |
vbObject | 9 | Automation object |
vbError | 10 | Error |
vbBoolean | 11 | Boolean |
vbVariant | 12 | Variant (used only with arrays of Variants) |
vbDataObject | 13 | A data-access object |
vbByte | 17 | Byte |
vbArray | 8192 | Array |
+ |
Suma |
- |
Resta |
* |
Multiplicacion |
/ |
División en coma flotante. Es la división normal. |
\ |
División de enteros |
^ |
Potencia |
Mod |
Resto de la división |
dim v1 dim v2 v1 = 34 v2 = 43 suma = v1 + v2 resta = v1- v2 potencia = v1 ^ v2 divisionEnteros = v1 \ v2 msgbox(divisionEnteros) DivisionReal = v1 /v2 msgbox(divisionReal)La función msgbox sirve para mostrar un valor en una ventanita de alerta típica de Windows. Podemos ver este script en funcionamiento.
= <> | Igual y distinto |
> < | Mayor que y menor que |
>= <= | Mayor o igual que y menor o igual que |
precio = 20000 dineroActual = 3500 if (dineroActual = precio) then msgbox ("Lo tienes justo") end if if (dineroActual < precio) then msgbox ("te falta dinero") end ifPodemos ver este script en funcionamiento.
AND | Y lógico |
OR | O lógico |
Xor | Xor |
Not | NO lógico |
cadena1 = "Hola " cadena2 = "Pepe" concatenar = cadena1 & cadena2 msgbox (concatenar)Podemos ver este script en funcionamiento.
La estrutura de control IF permite decidr entre dos opciones resultantes de
la evaluación de una sentencia. Si la evaluación es positiva hace una cosa,
también podemos especificar accioens para realizar en caso de que la evaluación
sea negativa. Veamos cómo funciona en VBscript.
IF (expresion) then Sentencias .... END IF |
IF (expresion) then Sentencias .... ELSE Sentencias .... END IF |
IF (expresion1) then Sentencias1 .... ELSEIF (expresion2) then Sentencias2 .... ELSEIF (expresion3) then Sentencias3 .... ELSE Sentencias4 .... END IF |
Se evalúa la primera expresión, en caso positivo se ejecutan las
sentencias1, en caso negativo se evalua la expresion 2. Si la expresión 2 es
positiva se ejecutan las sentencias 2 en caso negativo evaluamos la expresión 3
con el siguiente ELSEIF. Todo acaba en un ELSE en este ejemplo, pero el ELSE
final no es obligatorio.
SELECT CASE (variable) CASE (valor1): (acción para caso valor1) CASE (valor3): (acción para caso valor2) CASE (valor3): (acción para caso valor3) CASE ELSE: (accion en caso de que no se cumpla ningun anterior caso) END SELECT |
dim dia |
FOR (inicializacion)
TO (termino del bucle) STEP
(paso) sentencias ........ NEXT |
La sentecia realiza una repetición desde la inicialización hasta el término del bucle. Para llevar la cuenta se utiliza una variable, ya veremos en el ejemplo cómo se utiliza esta variable. Con cada ejecución del bucle se ejecutan unas sentencias. NEXT sirve para delimitar el final del bucle, cuando se encuentra con el NEXT se vuelve otra vez al principio del FOR, así hasta realizar el número de ejecuciones determinado.
Existe un valor que sirve para indicar lo grandes que se desean realizar los saltos entre ejecución y ejecución, es el valor STEP. Un STEP 2 determinaría que entre ejecución y ejecución la variable se ha de incremetar en 2 unidades. En el caso de no indicar nada se realizan pasos de 1 en 1. También podemos realizar pasos en valores negativos.
Un ejemplo de estos datos sería el siguiente:
for i=0 to 6 step 2 msgbox(i) next |
Este ejemplo presentaría un mensaje con un numerito de la variable i, utilizada para llevar la cuenta de las ejecuciones del bucle. Se puede ver un ejemplo de este script funcionando.
dim tor(20) for i=0 to 20 tor(i) = i next for each i in tor document.write (tor(i)) next |
WHILE
(condicion) sentencias .... WEND |
Ahora vamos a ver un ejemplito sobre este bucle, que realiza una cuenta
número a número hasta llegar al 13. En cada iteración del bucle muestra en una
ventanita el número actual y ofrece la posibilidad de cambiarlo, ya que la
ventanita es una ventana Input, que ofrece la oportunidad de cambiar el valor y
devuelve ese valor, cambiado o no. Como decíamos, si dejamos el ejemplo sin
tocar nada, cuenta hasta 13, pero si introducimos un número en el inputbox
continúa la cuenta por el número introducido. Si el número introducido es mayor
que 13 también se sale del bucle.
option explicit dim a a = 0 WHILE (a < 13) a = a + 1 a = inputbox("Dame un valor entero, please","Petición de número",a,200,100) WEND |
Podemos ver este ejemplo en funcionamiento.
Informe de Miguel Angel Alvarez
Director
desarrolloweb.com
Mail: eugim@desarrolloweb.com
Bucle DO LOOP
El bucle DO...LOOP es muy
versatil. Con el se pueden crear gran variedad de bucles distintos, bucles que
comprueben una condición antes de ejecutar el bucle una vez, después de la
primera ejecución y con conbinaciones con mientras (WHILE) que se cumple una
condición o hasta (UNTIL) que esa condicion se cumpla. la sintaxis de esta
estructura es la siguiente:
DO [WHILE | UNTIL
(condicion)] Sentencias ..... LOOP [WHILE | UNTIL (condicion)] |
Vamos a tratar de explicar esta sentencia de manera pausada para que sea más fácil de entender. Lo que siempre tendremos en estos bucles es el DO y el LOOP, entre estos dos colocaremos las sentencias que queremos ejecutar en cada iteración del bucle. Los bucles tienen que evaluar entre cada iteración si se siguen ejecutando o no, para ello evaluan una condición. Lo versatil de este bucle es que la condición se puede expresar de muchas maneras distintas.
Condición expresada al lado del DO: en este caso la
condición se evalua antes de empezar a ejecutarse el bucle.
Condición
expresada al lado del LOOP: en este caso la condición se evalua
después de ejecutarse el bucle. Tiene como diferencia principal frenta al otro
método que en este caso el bucle se ejecutará por lo menos una vez.
Además de poder expresar la condición en estos dos sitios también se puede construir la condición con un enunciado mientras (WHILE) o un enunciado hasta (UNTIL). Las diferencias semanticas de estas dos posibilidades se trasladan también a su manera de funcionar.
Vamos a ver un par de ejemplos de este bucle para comprender su funcionamiento. El ejemplo pide cunstantemente el nombre del autor de la página y no para hasta que el nombre sea "migue". También tiene el usuario la posibilidad de escribir "out", en ese caso, comprobado con un enunciado IF, se sale del bucle rompiéndolo con la sentencia EXIT DO, utilizada para romper bucles.
Dim entrada entrada = "" DO WHILE (entrada <> "migue") entrada = inputbox ("Dime el nombre del autor","seguridad","migue",2,3) if (entrada = "out") then msgbox "salgo por la puerta de atras" exit do end if LOOP |
Podemos ver este ejemplo en funcionamiento.
El siguente
ejemplo realiza una cuenta y entre cuenta y cuenta se muestra el valor de la
cuenta actual en una ventanita donde sale un botón de Reintentar y otro de
Cancelar. Si se pulsa reintentar se sigue ejecutando el bucle y si se pulsa
Cancelar se sale por la puerta de atrás, de manera similar a como se salía en el
ejemplo anterior, con EXIT DO.
option explicit dim cont dim respuesta cont = 0 DO cont = cont +1 respuesta = msgbox (cont,69,"Variable del bucle, con valor 6 se sale") if (respuesta = 2) then msgbox "Cuenta Cancelada",16,"Cancelaste!" exit do end if LOOP UNTIL (cont = 6) |
Los Arrays o matrices son unas estructuras de datos muy utilizadas en
cualquier lenguaje. Se tratan de variables, pero que están preparadas para
guardar una cantidad mayor de elementos. Es como una variable que tiene varios
compartimentos para guardar la información y a cada uno de esos compartimentos
hay que acceder con un índice.
Antes de utilizar un array debemos
declararlo de manera obligatoria, para ello utilizamos la palabra clave DIM, de
este modo.
dim miArray(20)
Después de la palabra DIM debemos
indicar el nombre del array y acontinuación, entre paréntesis, se coloca el
número de posición máxima del array, en este caso 20.
Los arrays en ASP
comienzan desde la posición 0, es decir, el primer elemento de un array está en
la posición 0. Por tanto, si el array ha sido definido con 20 casillas, como en
el ejemplo, tendrá 21 elementos, primera posición será la 0 y la última posición
sería la 20.
Para asignar un valor a un array se realiza igual que una
variable, pero accediendo con el índice de la posición que queremos escribir.
miArray(0) = 234
Para utilizar el contenido de un array debemos
hacerlo indiando el índice al que se desea acceder. Por ejemplo, si quisiesemos
imprimir en la página la primera posición de nuestro Array lo haríamos de esta
manera.
document.write(miArray(0))
Ahora vamos a ver un ejemplo
sobre cómo utilizar los arrays, donde vamos a realizar dos recorridos, uno para
escribir en él y el otro para leer la información y escribirla en la página.
dim matriz (10) for i=0 to 10 |
Este ejemplo escribiría en la página las posiciones del array, que contienen
variables numéricas que corresponden de multiplicar su índice por 100.
Si se desea, se puede ver el efecto resultante en una página web.
Se pueden construir matrices multidimensionales, es decir, que nos permitan crear matrices de varias coordenadas. Para trabajar con ellos se utiliza una coma que separa los dos índices. Por ejemplo podemos definir una matriz de 8x8 de esta manera.
dim miArray2Dimensiones (7,7)
Como el array es de 8 casillas, utilizamos un 7 y sus posiciones serán las 8 que van desde el 0 al 7. Para escribir y leer del Array podemos utilizar la coma de manera similara a como se declara. Por ejemplo, para meter datos en la posición 0,2 haríamos lo siguiente:
miArray2Dimensiones (0,2) = "texto posicion 0,2"
Los procedimientos o funciones son muy interesantes y útilies en la programación. Nos sirven para realizar una tarea concreta que probablemente se vaya a ejecutar varias veces a lo largo de la vida de la página. Esta tarea se especifica en un bloque de código de manera independiente y cuando se desean realizar las acciones del procedimiento se llama al porcedimiento o función. Una vez realizadas las acciones pertinentes se devuelve el flujo del programa al lugar desde donde se imbocó ese procedimiento o función.
Lo primero que debemos hacer al crear un procedimiento es pensar las cosas que se desean hacer dentro de la función, la información que necesitaremos (y que tendremos que recibir como parámetros) y la información que devolverá. Con estas ideas claras se pueden construir los procedimientos y funciones sin mucha dificultad, siguiendo estas estructuras.
Para un procedimiento
Sub nombre (parametro1, parametro2...)
... Código del
procedimiento
end Sub
Para una función
Function nombre (parametro1, parametro2...)
... Código de la
función
end Function
Decíamos que un procedimiento era una subrutina que se llamaba y realizaba
acciones, pero que no devolvía ningún valor y por lo tanto, no era posible
utilizarla dentro de una expresión.
Veamos algún ejemplo de
procedimiento. Es una subrutina que escribe en la barra de estado un mensaje. No
es muy complicada, pero tal como la presentamos aquí no se debería hacer, puesto
que utilizamos un bucle vacío para que el navegador esté un poco más lento y el
texto salga poco a poco. En lugar de ese bucle deberíamos utilizar una función
llamada setTimeout, pero no deseamos introducirla ahora.
sub muestraAbajo(texto) dim i for i=0 to len(texto) dim actual actual = left(texto,i) window.status = actual dim j 'bucle para ralentizar al navegador debería utilizarse la función setTimeOut for j=0 to 20000 j = j next next end sub |
Este ejemplo utiliza además varias funciones de cadenas de caracteres,
esperamos que no represente mucho problema para entenderlo. Básicamente es un
bucle que va recorriendo toda la cadena de caracteres que recibe por parámetro.
A medida que se realiza el bucle se va creando una subcadena de caracteres
de la parte izquierda de la cadena original, que cada vez es más larga. Luego se
imprime esa cadena en la barra de estado del navegador. Entre ejecución y
ejecución del bucle se realiza un retardo, en el segundo bucle for que se
debería realizarse con un setTimeout.
Podemos ver a continuación cómo se colocaría un botón en la página que llamase a este procedimiento.
<HTML> <P> |
function operar (operador,op1,op2) |
Vemos que la función recibe tres parámetros, el primero es un operador,
que no es más que un texto con el signo de la operación a realizar. Los dos
siguientes parámetros son los operadores que hay que tratar.
La función
realiza una operación matemática dependiendo de del operador y devuelve en cada
caso el resultado conveniente. Fijémonos que para devolver un valor se debe
realizar una asignación del nombre de la función al valor que se desea
devolver.
No creemos que revista ninguna complicación. Vamos a ver ahora el código que podríamos utilizar para hacer la llamada a la función.
miOperador="+" |
Al final de todas estas sentencias la variable resultado tendrá como valor 253.
Veamos el ejemplo completo, que consistía en una calculadora hecha con
un formulario, que usa esta función para obtener los
resultados.
<HTML> sub opera () |
Ahora vamos a ver algunas cosas más sobre subrutinas que nos han quedado en
el tintero. Un poco en cajón de sastre.
Llamadas a subrutinas
En Visual Basic Script las funciones se utilizan como partes de
expresiones y los procedimientos como si fuera una sentencia independiente.
La llamada a una función, si se utiliza como parte de una expresión se
debe llamar utilizando paréntesis.
miResultado = suma(1,2)
Si no
se utiliza como parte de una expresión, no tienen por que utilizarse los
paréntesis, pero el resultado de la funcuión (lo que devuelve) se perderá.
suma 1,2
Call
Es una llamada a una subrutina,
utilizada para transferir el flujo de la aplicación hacia una subrutina. Es
necesario utilizar paréntesis cuando se utiliza. Además, si se utiliza con una
función se perderá el resultado que devuelva.
call suma(1,2)
Salida de una subrutina
Podemos salirnos de un
procedimiento o función en cualquier momento, independientemente de que la
función haya termiando o no. El enunciado para escaparse de una función es EXIT,
que se puede utilizar en cualquier lugar del procedimiento o función. La palabra
exit debe ir acompañada del tipo de subrutina de la que se desea salir, así pues
se deberá utilizar o bien exit function o exit sub.
Informe de Miguel Angel Alvarez
Director
desarrolloweb.com
Mail: eugim@desarrolloweb.com