Llamamos “módulo”, “rutina” o “subprograma” a cada una de
las acciones que ejecutamos en nuestro algoritmo y que luego vamos a desarrollar. Ejemplo Preparar una taza de té: Invocamos a los módulos “caminar hacia la cocina”, “calentar el agua”, etc. Luego tendremos que desarrollar cada uno de estos módulos para los cuales, probablemente, necesitemos invocar a otros módulos que también tendremos que desarrollar. Funciones
Cuando aplicamos algoritmos a la resolución de problemas
computacionales los módulos se implementan como funciones. Una función es un subprograma invocado desde el programa principal (o desde otra función) que ejecuta una tarea determinada y luego, retorna el control al programa o función que la invocó Funciones definidas por el programador La modularización es la base de la metodología top-down y, en C los módulos se implementan como funciones. Las funciones realizan una determinada tarea “en función” de un conjunto de argumentos que reciben como parámetros y luego retornan un resultado. A este resultado lo llamaremos “valor de retorno”. El valor que retorna una función, generalmente, dependerá de los valores de los argumentos que le pasemos. Metodología top-down
La metodología top-down propone pensar la solución de un
problema en base a una secuencia de acciones de nivel general cuyos pasos iremos refinando sucesivamente. Esto significa partir de un análisis global y refinarlo hasta llegar a un análisis particular. Aplicando esta metodología a la resolución de problemas computacionales podremos resolver situaciones complejas. Una función se compone de una cabecera y un cuerpo. En la cabecera se especifican los parámetros con los que la función va a trabajar y el tipo de dato del valor de retorno. El cuerpo es la codificación del algoritmo de la función. Prototipo de una función Header, describe la lista de argumentos que la función espera recibir y el tipo de dato de su valor de retorno. Por ejemplo, si pensamos en una función que retorne el valor absoluto de un número, su prototipo será el siguiente:
double valorAbsoluto(double); Invocar a una función
Si desde el programa principal queremos invocar a una
función previamente tendremos que prototiparla. Esto no es más que agregar una línea de código con el prototipo de la función que vamos a utilizar. Desarrollo de una función
Para desarrollar una función, se debe definir su cabecera
y su cuerpo. La cabecera es idéntica al prototipo, pero le pone nombre a los argumentos que, desde el punto de vista de la función llamaremos “parámetros”. Nomenclatura
Los nombres que pueden dárselo a las funciones tienen las
mismas restricciones que aplican sobre los nombres de las variables. Nombres simples: deben escribirse completamente en minúscula. sumar, procesar, abrir, cerrar... Nombres compuestos: si el nombre de la función está compuesto por dos o más palabras entonces cada una, exceptuando la primera, debe comenzar en mayúscula. valorAbsoluto, obtenerFechaNacimiento, procesarValores… Funciones que no retornan ningún valor (tipo de datos void) En C existe el tipo de datos void (nulo). Este tipo se utiliza, entre otras cosas, para indicar que una función no retornará ningún valor. Función saludar que simplemente muestra por pantalla un cordial saludo. void saludar() { printf("Hola !!!\n"); return; }