Anuncios

Bienvenidos sean a este post, al igual que en Visual Basic en VBscript tambien disponemos de la posibilidad de crear nuestras propias funciones (como en todos los lenguajes) y procedimientos tambien conocido como subrutinas.

Anuncios

Para iniciar las funciones se usa la palabra function y los procedimientos con la palabra sub, para los que conocen algo de Visual Basic o VBA estos dos nombres les resultaran algo familiares.

Anuncios

Primero hablemos de los procedimientos, para definir uno simplemente debemos usar la siguiente sintaxis:

sub nombreProc(arg1, arg2, argN)
	... instrucciones ...
end sub
Anuncios

Siempre comienzan con la palabra sub luego ira el nombre del procedimiento, recuerden que no debe coincidir con las palabras reservadas, y despues entre parentesis pondremos los argumentos que sean necesarias separados por comas, por eso el argN, asi como tambien podemos no informar ninguno, eso va a depender de nuestras necesidades, despues pondremos todas las instrucciones de este procedimiento y para cerrar el procedimiento usamos siempre end sub.

Anuncios

Las funciones son muy similares a los procedimientos pero su principal diferencia es que devuelve un valor como resultado del codigo, para definir una funcion debemos usar la siguiente sintaxis:

function nombreFunc(arg1, arg2, argN)
	... instrucciones ...
	nombreFunc = "valor a devolver"
end function
Anuncios

En este caso en lugar de comenzar con sub lo hacemos con function despues ira el nombre de la funcion, entre parentesis los argumentos necesarios, si no se necesitan no se informan, tambien las instrucciones pero ahora al final de las instrucciones agregaremos el nombre de la funcion y el valor a devolver, para cerrar la funcion usamos en end function, la devolucion que mencionamos se hace atraves de una variable “ficticia” porque en realidad se llama igual que la funcion y como mostramos antes ponemos el nombre de la funcion con el valor a enviar, por ejemplo tenemos que devolver el numero 3 se haria algo asi:

nombreFunc = 3

Al igual que ocurre en Javascript para llamar tanto a la funcion como al procedimiento se hace simplemente con el nombre de la misma y en caso de tener que enviar informacion para la funcion se hace a traves de los parentesis separados con coma para cada argumento, en el caso de un procedimiento se envia la informacion separadas por comas sin los parentesis, si se omite alguno el lenguaje los creara como vacio en la funcion o procedimiento, veamos un ejemplo para ponerlo en practica:

function.vbs

dim total

sub p_Sumar(a, b)
	total = a + b
end sub

function f_Sumar(a, b)
	f_Sumar = a + b
end function

p_Sumar 3, 4
wscript.echo total

total = f_Sumar(4, 5)
wscript.echo total
Anuncios

En este caso primero creamos un sub, de ahora en mas llamaremos asi a los procedimientos, llamado p_Sumar que recibe dos argumentos (a y b), y en las instrucciones las sumamos y la asignamos a total, aunque despues hablaremos de esto; el dim total al principio permite que la variable sea global y la podamos usar en todo el programa si lo hubieramos generado en el sub directo no hubieramos podido extraer el valor de total porque seria local de la funcion, nuestra siguiente bloque es la funcion f_Sumar que recibe dos argumentos pero en lugar de asignarlo a total se lo asigna a la funcion para que la devuelva al finalizar la misma, ahora veremos cual es la ventaja de esto.

Anuncios

Despues llamamos al sub y le enviamos los valores 3 y 4, sin los parentesis, y este se lo asignara automaticamente a a y b, para luego mostrar en pantalla el valor de total, si lo hacemos veremos esto

Anuncios

Como pueden ver ejecuto perfectamente la sub y a su vez le asigno el valor a total, la siguiente linea vemos que a total le asignamos la funcion f_Sumar con dos valores, como dijimos antes la funcion al devolver el valor que se genero internamente este lo asignara a total, luego lo mostramos donde obtenemos lo siguiente

Anuncios

En esta imagen vemos que se ejecuto perfectamente la funcion y envio el resultado de la operacion a nuestra variable, tambien podemos llamar a una funcion por medio de call, como en Visual Basic, y se puede enviar los datos entre parentesis pero esto hara que ignoremos el valor de devolucion de la funcion, asi que esto es util cuando debemos llamar a una funcion en la cual no nos interesa lo que devuelve sino lo que procesa, tambien se puede usar para sub y en este caso no nos debemos preocupar por el resultado a devolver, lo unico que si deben enviar los argumentos entre parentesis.

Cuando enviamos un argumento tanto para la funcion como el sub no envia una copia del contenido sino que lo hace por referencia, es decir que se manda un apuntador a la variable, y en caso de que se modifique dentro del sub esta se modificara permanentemente, nosotros podemos usar la palabra reservada ByRef antes del nombre de cada argumento, aunque no es necesario porque esta es la conducta predeterminada, veamos el siguiente ejemplo:

subs.vbs

dim miVar

miVar = 5

Cambia miVar

wscript.echo(miVar)

sub Cambia(Valor)
	Valor = Valor - 3
end sub
Anuncios

En este caso tenemos una variable llamada miVar a la cual le asignaremos un valor de 5, si la pasamos al sub Cambia, esta la recibe y le resta 3, nosotros luego chequeamos y vemos que nos devuelve 2 pero nosotros no modificamos a miVar sino a Valor en el sub pero porque modifico a miVar? Esto es debido a lo que hablamos antes, como nosotros usamos referencias en lugar de modificar a Valor va directo a miVar, para evitar esto debemos usar ByVar, modifiquemos el ejemplo anterior de la siguiente manera:

dim miVar

miVar = 5

Cambia miVar

wscript.echo(miVar)

sub Cambia(ByVal Valor)
	Valor = Valor - 3
end sub
Anuncios

En este caso solo modificamos a Cambia agregando ByVal en el argumento del sub, si nosotros ejecutamos de vuelta este programa nos devolvera 5 cuando verifiquemos a miVar, ya que ahora no usa la referencia sino usa el valor informado en el argumento, en realidad es una copia del contenido de la variable.

Anuncios

Si bien nosotros dijimos que tenemos un bloque que delimita la funcion o el sub tambien tenemos la posibilidad de salir de cualquiera de ellos en cualquier momento por medio de exit function o exit sub, se pueden ubicar en cualquier parte del bloque pero siempre despues de la linea que lo crea y antes de la la linea que lo termina, su accion es inmediata cuando es llamada.

Anuncios

En resumen, hoy hemos visto que son las funciones y procedimientos, sus cosas en comun, sus diferencias, para que pueden ser utiles, como trabajan, los beneficios, las contras, como llamarlos, como trabajarlos en otros aspectos y algunas funciones particulares, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00