Vous êtes sur la page 1sur 6

FUNCIONES Y PROCEDIMIENTOS

Conceptos generales sobre funciones


Modularizacin es el proceso consistente en dividir un programa muy
grande en una serie de mdulos mucho ms pequeos y manejables. A estos
mdulos se les suele denominar de distintas formas (subprogramas, subrutinas,
procedimientos, funciones, etc.) segn los distintos lenguajes.
!a divisin de un programa en unidades ms pequeas o funciones
presenta las siguientes ventajas"
#. Modularizacin. $ada funcin tiene una misin muy concreta, de modo que
nunca tiene un nmero de l%neas e&cesivo y siempre se mantiene dentro de un
tamao manejable. Adems, una misma funcin (por ejemplo, un producto de
matrices, una resolucin de un sistema de ecuaciones lineales, etc.) puede ser
llamada muchas veces en un mismo programa, e incluso puede ser reutili'ada por
otros programas. $ada funcin puede ser desarrollada y comprobada por
separado.
(. Ahorro de memoria y tiempo de desarrollo. )n la medida en que una misma
funcin es utili'ada muchas veces, el nmero total de l%neas de cdigo del
programa disminuye, y tambi*n lo hace la probabilidad de introducir errores en el
programa.
+. Independencia de datos y ocultamiento de informacin. ,na de las fuentes
ms comunes de errores en los programas son los efectos colaterales que se
pueden producir entre distintas partes del programa. )s muy frecuente que al
hacer una modificacin para aadir una funcionalidad o corregir un error, se
introdu'can nuevos errores en partes del programa que antes funcionaban
correctamente. ,na funcin es capa' de mantener una gran independencia con el
resto del programa, manteniendo sus propios datos y definiendo muy claramente
la interfaz o comunicacin con la funcin que la ha llamado y con las funciones a
las que llama, y no teniendo ninguna posibilidad de acceso a la informacin que no
le compete.
Funciones y procei!ientos Sub en "isual #asic
)n Visual Basic se distingue entre funciones y procedimientos Sub. )n
ocasiones se utili'a la palabra gen*rica procedimiento para ambos. !a
fundamental diferencia entre un procedimiento Sub y una funcin es que *sta
ltima puede ser utili'ada en una e&presin porque tiene un valor de retorno. )l
valor de retorno ocupa el lugar de la llamada a la funcin donde esta aparece. -or
ejemplo, si en una e&presin aparece sin(x) se calcula el seno de la variable x y el
resultado es el valor de retorno que sustituye a sin(x) en la e&presin en la que
aparec%a. -or tanto, las funciones devuelven valores, a diferencia de los
procedimientos que no devuelven ningn valor, y por tanto no pueden ser
utili'adas en e&presiones. ,n procedimiento Sub es un segmento de cdigo
independiente del resto, que una ve' llamado por el programa, ejecuta un nmero
determinado de instrucciones, sin necesidad de devolver ningn valor al mismo
(puede dar resultados modificando los argumentos), mientras que una funcin
siempre tendr un valor de retorno.
!os nombres de los procedimientos tienen reglas de visibilidad parecidas a
las de las variables. -ara llamar desde un formulario a un procedimiento ublic
definido en otro formulario es necesario preceder su nombre por el del formulario
en que est definido. .in embargo, si se desea llamar a un procedimiento definido
en un mdulo estndar (!"bas) no es necesario precederlo del nombre del mdulo
ms que si hay coincidencia de nombre con otro procedimiento de otro mdulo
estndar.
Funciones $function%
!a sinta&is correspondiente a una funcin es la siguiente"
/Static0 /Pri&ate0 Function nombre (/parmetros0) /'s tipo0
/sentencias0
/nombre 1 e&presion0
/E(it Function0
/sentencias0
/nombre 1 e&presion0
En Function

donde nombre es el nombre de la funcin. .er de un tipo u otro dependiendo del
dato que devuelva. -ara especificar el tipo se utili'a la clusula As #ipo (Inte$er,
%on$, Sin$le, &ouble, 'urrency, Strin$ o Variant). par(metros son los
argumentos que son pasados cuando se llama a la funcin. Visual Basic asigna el
valor de cada argumento en la llamada al parmetro que ocupa su misma
posicin. .i no se indica un tipo determinado los argumentos son Variant por
defecto. $omo se ver en un apartado posterior, los argumentos pueden ser
pasados por referencia o por valor. )l nombre de la funcin, que es el valor de
retorno, acta como una variable dentro del cuerpo de la funcin. )l valor de la
variable expresion es almacenado en el propio nombre de la funcin. .i no se
efecta esta asignacin, el resultado devuelto ser 2 si la funcin es num*rica,
nulo (33) si la funcin es de caracteres, o Empty si la funcin es Variant.
)xit *unction permite salir de una funcin antes de que *sta finalice y
devolver as% el control del programa a la sentencia inmediatamente a continuacin
de la que efectu la llamada a la funcin.
!a sentencia )nd *unction marca el final del cdigo de la funcin y, al igual
que la )xit *unction, devuelve el control del programa a la sentencia siguiente a
la que efectu la llamada, pero lgicamente una ve' finali'ada la funcin.
!a llamada a una funcin se hace de diversas formas. -or ejemplo, una
de las ms usuales es la siguiente" variable 1 nombre(/argumentos0)
donde ar$umentos son un lista de constantes, variables o e&presiones separadas
por comas que son pasadas a la funcin. )n principio, el nmero de argumentos
debe ser igual al nmero de parmetros de la funcin. !os tipos de los
argumentos deben coincidir con los tipos de sus correspondientes parmetros, de
lo contrario puede haber fallos importantes en la ejecucin del programa. )sta
regla no rige si los argumentos se pasan por valor (concepto que se ver ms
adelante).
)n cada llamada a una funcin hay que incluir los par*ntesis, aunque *sta
no tenga argumentos.
)l siguiente ejemplo corresponde a una funcin que devuelve como
resultado la ra%' cuadrada de un nmero +"
Function 4ai' (5 As 6ouble) As 6ouble
7f 5 8 2 9hen
)&it :unction
)lse
4ai' 1 .qr(5)
En Function
!a llamada a esta funcin se hace de la forma siguiente"
$uadrada 1 4ai'(5um)
A diferencia de $ y $;; en Visual Basic no es necesario devolver
e&pl%citamente el valor de retorno, pues el nombre de la funcin ya contiene el
valor que se desea devolver. 9ampoco es necesario declarar las funciones antes
de llamarlas.
Procei!ientos Sub
!a sinta&is que define un procedimiento Sub es la siguiente"
/Static0 /Pri&ate0 Sub nombre /(parmetros)0
/sentencias0
/E(it Sub0
/sentencias0
En Sub
!a e&plicacin es anloga a la dada para funciones. !a llamada a un
procedimiento Sub puede ser de alguna de las dos formas siguientes"
Call nombre/(argumentos)0 o bien, sin pasar los argumentos entre
par*ntesis, sino poni*ndolos a continuacin del nombre simplemente separados
por comas" nombre /argumentos0
A diferencia de una funcin, un procedimiento Sub no puede ser utili'ado
en una e&presin pues no devuelve ningn valor. -or supuesto una funcin puede
ser llamada al modo de un procedimiento Sub, pero en este caso no se hace
nada con el valor devuelto por la funcin.
)l siguiente ejemplo corresponde a un procedimiento Sub que devuelve
una variable F que es la ra%' cuadrada de un nmero N.
Sub 4ai' (5 As 6ouble, : As 6ouble)
7f 5 8 2 9hen
E(it Sub <.e mandar%a un mensaje de error
)lse
: 1 .qr(5)
)nd 7f
En Sub
!a llamada a este procedimiento Sub puede ser de cualquiera de las dos
formas siguientes"
4ai' 5, :
$all 4ai'(5, :)
)n el ejemplo anterior, el resultado obtenido al e&traer la ra%' cuadrada al
nmero N se devuelve en la variable F pasada como argumento, debido a que
como se ha mencionado anteriormente, un procedimiento Sub no puede ser
utili'ado en una e&presin.
'rgu!entos por referencia y por &alor
)n las funciones (*unction) y en los procedimientos Sub de Visual
Basic, por defecto los argumentos se pasan por referencia= de este modo,
cualquier cambio de valor que sufra un parmetro dentro de la funcin o del
procedimiento Sub tambi*n se produce en el argumento correspondiente de la
llamada a la funcin o al procedimiento Sub.
$uando se llama a una funcin o a un procedimiento Sub, se podr
especificar que el valor de un argumento no sea cambiado por la funcin o por el
procedimiento, poniendo dicho argumento entre par*ntesis en la llamada. ,n
argumento entre par*ntesis en la llamada es un ar$umento pasado por valor.
-or ejemplo,
4ai' ((5um)) < )n el caso de la funcin
4ai' (5um), : < )n el caso del procedimiento
)l argumento +um es pasado por valor. .ignifica que lo que se pasa es
una copia de +um. .i el procedimiento cambia ese valor, el cambio afecta slo a
la copia y no a la propia variable +um.
>tra forma de especificar que un argumento ser siempre pasado por
valor es anteponiendo la palabra ByVal a la declaracin del parmetro en la
cabecera del procedimiento (Sub o *unction).
-or ejemplo"
:unction 4ai' (#y"al 5 As 6ouble)
.ub 4ai' (#y"al 5 As 6ouble, : As 6ouble)
-asar argumentos por valor evita modificaciones accidentales, pero tiene
un coste en tiempo y memoria que puede ser significativo cuando se pasan
grandes volmenes de informacin, como sucede con vectores, matrices y
estructuras.
Procei!ientos recursi&os
.e dice que una funcin (*unction) es recursiva o que un procedimiento
Sub es recursivo si se llaman a s% mismos. A continuacin se presenta un ejemplo
de una funcin que calcula el factorial de un nmero programada de forma
recursiva.
:unction :actorial (5 As 7nteger) As !ong
7f 5 1 2 9hen
:actorial 1 # <$ondicin de final
)lse
:actorial 1 5 ? :actorial (5 @ #)
)nd 7f
)nd :unction
)n este ejemplo, si la variable 5 que se le pasa a la funcin vale 2,
significar que se ha llegado al final del proceso, y por tanto se le asi$na el valor
# al valor del factorial (recordar que 2A 1 #). .i es distinto de 2, la funcin se llama
a ella misma, pero variando el argumento a (5@#), hasta llegar al punto en el que
5@#12, finali'ndose el proceso. ( -asar un argumento por referencia implica que
en realidad se pasa a la funcin la variable original, de modo que la funcin puede
modificar su valor. -asar por valor implica crear una nueva variable dentro de la
funcin y pasarle una copia del valor de la variable e&terna. .i se modifica el valor
de la variable copia, la variable original queda inalterada. $uando en la llamada a
una funcin se ponen como argumentos constantes num*ricas o e&presiones los
valores se pasan por valor.
Procei!ientos con argu!entos opcionales
-uede haber procedimientos en los que algunos de los argumentos
incluidos en su definicin sean opcionales, de forma que el programador pueda o
no incluirlos en la llamada de dichos procedimientos. !a forma de incluir un
argumento opcional es incluir la palabra ,ptional antes de dicho argumento en la
definicin del procedimiento. .i un argumento es opcional, todos los argumentos
que vienen a continuacin deben tambi*n ser opcionales.
$uando un argumento es opcional y en la llamada es omitido, el valor que
se le pasa es un Variant con valor Empty. A los argumentos opcionales se les
puede dar en la definicin del procedimiento un valor por defecto para el caso en
que sean omitidos en la llamada, como por ejemplo"
-rivate .ub mi-roc(& as 6ouble, Optional n1+ As 7nteger)
sentencias
)nd .ub
N)!ero ineter!inao e argu!entos
)ste caso es similar pero diferente del anterior. )n este caso no es que
haya argumentos opcionales que puedan omitirse en la llamada, sino que
realmente no se sabe con cuntos argumentos va a llamarse la funcin= unas
veces se llamar con (, otras con + y otras con B. )n este caso los argumentos se
pasan al procedimiento por medio de un array, especificndolo con la palabra
aramArray en la definicin del procedimiento, como por ejemplo"
-ublic :unction ma&imo(Para!'rray numeros())
:or )ach & in numeros
sentencias
ma&imo 1 &
5e&t &
)nd :unction
Utili*aci+n e argu!entos con no!bre
Visual Basic ofrece tambi*n la posibilidad de llamar a las funciones y
procedimientos Sub de una forma ms libre y menos formal, pasando los
argumentos en la llamada al procedimiento con un orden arbitrario. )sto se
consigue incluyendo el nombre de los argumentos en la llamada y asignndoles
un valor por medio de una construccin del tipo miAr$umento-.unValor. ,nos
argumentos se separan de otros por medio de comas (,). $onsid*rese el siguiente
ejemplo"
-ublic .ub )nviar$arta(ireccion As .tring, estinatario As .tring)
sentencias
)nd .ub
que se puede llamar en la forma"
)nviar$arta estinatario,-3!ic. Cenite'3, ireccion,-3D*&ico, 6:3
5o todas las funciones que se pueden llamar en Visual Basic admiten
argumentos con nombre.

Vous aimerez peut-être aussi