Sunteți pe pagina 1din 7

Unidad 11.

Funciones
11.1. Objetivos del tema.
Visto y nombrado los elementos de un programa y sus estructuras, as como la
forma de representar las soluciones y el uso de procedimientos, ahora hemos de
profundizar sobre el uso de las funciones, el paso de parmetros y sus
caractersticas.
Las veremos desde el punto de vista genrico, sin entrar en lenguajes en concreto.
11.2. Introduccin.
Un programa es una estructura ms o menos compleja, en funcin del tamao del
mismo.
Pero el cdigo que lo compone no puede estar todo en el Main del mismo, sera
difcil de entender y de modificar, adems de muy largo, por lo tanto conviene
trocear.
Si recordamos el ejercicio del primer tema, ese es el camino, pequeos trozos de
programa, fciles de escribir y de modificar.
Y la solucin era el dividir el programa y crear procedimientos.
Ahora vamos a ver las funciones, pero las funciones a pesar de que en su interior
pueden albergar el mismo tipo de estructuras que un procedimiento, tienen un fin
distinto dentro de un programa.
11.3. Creacin.
Hay una mxima que s podra servir, y es que en el momento en que en el
programa aparece cdigo repetido, ya podemos empezar a pensar en la creacin de
una funcin o un procedimiento, segn corresponda.
Tambin hay que tener en cuenta que la llamada a una funcin o un procedimiento
consume recursos y tiempo de ejecucin, pero en la actualidad se piensa poco en
esos parmetros.
Resolver de forma recursiva el factorial de un nmero es bonito, pero y si el
nmero es algo grande?
Con un procedimiento resuelvo el programa y voy creando la estructura del mismo.
Una funcin es un trozo de cdigo especializado en hacer algo en concreto, por
ejemplo, el ejercicio del rea de un triangulo o de una circunferencia, se resolvi
mediante un procedimiento, pero su solucin correcta es la de una funcin, por
qu?, pues normalmente el rea del triangulo es un dato que voy a calcular y que
puede aparecer hasta en una expresin habitualmente.

Si utilizo procedimientos, la solucin puede ser algo as:

Altura = 5
Base = 10
AreaTriangulo(Base,Altura,Area)

Escribe El rea del triangulo es , Area

Esta es la solucin con un procedimiento, ejecutamos el procedimiento y nos


devuelve un dato llamado Area, que lo usamos en el texto de informe al usuario.

Escribe El rea del triangulo es , AreaTriangulo(Base,Altura)

Como podemos
ver con una
funcin es
mucho ms
elegante el
cdigo
resultante.

Cuando escribir
una funcin o un
procedimiento?,
en el ejemplo
podemos ver un
criterio.
Un procedimiento es una lnea de mi programa, lo llamo y se ejecuta, resuelvo el
problema estructural del programa con ellos.
Una funcin forma parte de una instruccin, una funcin siempre devuelve un dato,
un procedimiento no tiene porque hacerlo.

En el caso de una funcin no nos sirve el criterio de que un procedimiento crezca en


demasa, para crear una funcin, hay una diferencia de base entre un
procedimiento y una funcin, y es que un procedimiento puede formar, o forma
parte, de la resolucin lgica de un programa, parte de su estructura, pero una
funcin es una parte de nuestro programa que est especializado en algo muy
concreto y que solo sabe resolver ese tema, y no formar parte de la estructura del
programa, colabora en su solucin.

Evidentemente que s convierte en ms legible un programa, el uso de una funcin,


pero no es la forma de resolver un programa, por supuesto que su uso es necesario
en programacin, pero hay que ver ese matiz entre ambas herramientas de
programacin.

Un procedimiento, un mtodo, cuando crece se puede dividir en varios


procedimientos, pero no en varias funciones.

En el diseo de una funcin, hay que mantener el criterio, de que solo se utilice las
variables que se definan en la misma, y las que se reciban en la lnea de entrada,

pero de forma todava mucho ms taxativa, una funcin, por naturaleza, es una
parte de cdigo mucho ms reutilizable, normalmente, que un procedimiento, por lo
tanto debe ser todava mucho ms aislado, autnomo.

De todos modos, ser la experiencia la que nos ira marcando cuando usar el
procedimiento y cuando la funcin.
11.4. Funciones o Procedimientos.?
En el peor de los casos, todo lo que se puede escribir en un procedimiento se puede
resolver tambin con una funcin, o al revs, tcnicamente!, en la realidad no debe
abordarse as, porque en algunas ocasiones para hacerlo, hay que cometer alguna
incorreccin.
Una funcin devuelve siempre un nico dato, un procedimiento puede devolver uno
o varios, o ninguno, pero es que si se usan adecuadamente las funciones, con un
nico dato es suficiente.
11.5. Tipos de la funcin.
Hemos dicho que una funcin
devuelve un dato, por lo tanto si
devuelve un dato, ese dato debe de
ser de un tipo, de ah que la funcin
cuando se crea hay que declarar de
que tipo es, y ese tipo es el del dato
devuelto.
Otra forma de clasificar las funciones
es dividirlas por las propias del
lenguaje y las que diseemos
nosotros, todos los lenguajes de
programacin disponen de funciones
preescritas en el mismo.

En el ejemplo vemos una funcin


escrita por nosotros, y vemos como
en su interior utilizamos funciones del
lenguaje en el que se escribe esa
funcin.

La funcin del ejemplo es del tipo alfanumrico porque lo que devuelve es un dato
alfanumrico.

Por lo tanto tendremos tantos tipos de funciones como tipos de datos disponga el
lenguaje que estamos utilizando.
11.6. mbito de las funciones.
El mbito de una funcin va ligado al punto en el cual se utiliza y como se declara,
igual que con los procedimientos.

Pueden ser pblicas o privadas, y pueden declararse en el programa actual o en un


mdulo disponible para toda la aplicacin, proyecto.
11.7. Paso de variables a las funciones.
El paso de variables a las funciones cumple los mismos requisitos que el de los
procedimientos.
Para ellos hay que seguir unas normas, que son de lo ms sencillas y
absolutamente lgicas.

Si nosotros diseamos un procedimiento, ste tendr unas necesidades de datos.


Esos datos sern propios o externos, los propios no hay problema, pero los externos
hemos de facilitrselos, para ello hay unas normas.
El envo y recepcin han de realizarse en el mismo orden y con el mismo tipo de
datos.
Si vemos el ejemplo, vemos que ambas coinciden en el color, digamos que sea el
tipo, son del mismo tamao, digamos que sea el dato que se enva.
El siguiente ejemplo vemos que no coinciden ni color, tipo, ni tamao dato, ni el
nmero de parmetros que se envan y reciben.

El nombre no tiene porque coincidir, pensemos que el mismo procedimiento puede


utilizarse en varios programas, no tienen porque coincidir los nombres de las
variables por eso, si no sera un problema bastante serio.

Actualmente hay lenguajes que permiten que haya variables de uso opcional en la
lnea de parmetros.

Pero eso es una


excepcin.
11.8. Formas de
paso de datos a
las funciones.
Hay dos formas de pasar los
datos a los procedimientos y
funciones, por valor y por
referencia.

El paso de datos por


referencia, es lo que nos
permite que un procedimiento
sea independiente del
programa que lo llama.
De esa forma podemos
conseguir que un
procedimiento o una funcin,
trabaje con los datos de otro
procedimiento o programa sin
necesidad de que las variables
se llamen igual.

El paso de datos por referencia a una funcin, nos da la posibilidad de poder


modificar el valor de una variable pasada en la funcin, y que ste sea devuelto al
programa principal o al procedimiento que lo ha llamado.

Otro apartado, es que por la


definicin intrnseca de lo que
debe ser una funcin, no sea
correcto realizar ese tipo de
actuaciones, paso por referencia
en una funcin, ya que eso en
realidad me permitira devolver
no un dato, si no varios en la
misma, uno en la funcin y otros
en la lnea de parmetros en las
variables recibidas, lo que
contradice la filosofa de lo que
debe ser una funcin.

Pero hemos de saberlo y


comprobar que el lenguaje lo
permite o no, y de esa forma si
llega el momento utilizarlo.

Cuando se pasa un dato por valor el dato es recibido por el procedimiento o funcin,
pero ste dato si se modifica en su interior no se recibe modificado en el lugar en el
que se realiza la llamada a la funcin.

El paso de datos por valor a un procedimiento o funcin, nos da la posibilidad de


poder enviar el dato de una variable y que la variable no pueda ser modificada en
su contenido al finalizar la ejecucin del procedimiento o funcin, y devolverse el
control al programa principal o al procedimiento que lo ha llamado.
11.9. Estructura de una funcin.
Al igual que en un procedimiento, podemos
utilizar todas las estructuras que conocemos.
Pero hemos de aadir algo que en un
procedimiento quizs no es tan riguroso.
Hay que asegurarse que los datos que vamos a
utilizar son vlidos, por lo tanto debemos
comprobar su validez antes de entrar en lo que
es el cuerpo de la funcin.
Por otro lado en funcin del lenguaje utilizado,
podremos utilizar o no el nombre de la funcin
en la misma varias veces.

As que lo ms sencillo es declarar una variable


temporal a la que le asignamos un valor por

defecto y que despus cuando finalice la ejecucin de la funcin asignaremos al


nombre de la misma.

Hay que pensar que tanto una funcin como un procedimiento son mini programas,
pero en el caso de una funcin an ms.

Esta es una forma de plantear una funcin, pero el momento y el estilo de cada uno
es personal e intransferible, por lo que a partir de ah cada cual puede ir creando su
estilo.