jueves, 1 de julio de 2010

Usa bien las funciones y los procedimientos

Las funciones y los procedimientos son una de las bases de C. Sin ellas, el código sería lineal, difícil de comprender y seguramente comprendería mas fallos. Además de no poder aplicar la programación modular, estéticamente quedaría bastante feo.

Por ello, voy a dar un repaso a las funciones y procedimientos: Qué usar en cada caso, cómo usarlo y por qué usarlo.

Función: Parte específica de un código, el cual permite resolver 1 problema de forma específica. En C, las funciones devuelven valores, al igual que se las pueden pasar parámetros.

Procedimiento: En C, igual que una función, solo que esta no devuelve ni recibe datos. (En ocasiones puede recibir datos como parámetros)

¿Qué usar?

A simple vista, los procedimientos parecen algo inútiles. Pero son mas útiles de lo que parece, pues imaginemos que en un programa, debemos mostrar varias veces un grupo de textos que nos indican algo (Por ejemplo, una pequeña explicación de lo que hace nuestro programa). En este caso conviene usar un procedimiento, y llamarlo desde la función que deseemos.

En el próximo código suponemos que ya hemos declarado el prototipo de función de mostrarAyuda(); y el resto del código:

void mostrarAyuda() //Procedimiento
{
fprintf (stdout, " Ayuda para el programa\n\n");
fprintf (stdout, " ...... \n\n");
fprintf (stdout, " ...... \n\n");
}

Al llamar al procedimiento, veremos todos nuestros fprintf's, sin necesidad de escribirlos varias veces dentro de una función.

Llamar a mostrarAyuda() desde main():

#include <stdio.h>

void mostrarAyuda(); //Prototipo de función

int main (void) //Función principal del programa
{
mostrarAyuda();
return 0;
}

void mostrarAyuda() //Procedimiento
{
fprintf (stdout, " Ayuda para el programa\n\n");
fprintf (stdout, " ...... \n\n");
fprintf (stdout, " ...... \n\n");
}

Las funciones se usan de forma similar, solo que su tipo no es void (Sin retorno) y que generalmente, se la pasan parámetros. Veamos un ejemplo, suponiendo que ya hemos declarado el prototipo de función y el resto del código:

int retornaMax(int a, int b)
{
if (a>=b) return a;
if (b>a) return b;
}
A esta función le pasamos como parámetro 2 enteros, los cuales vamos a comparar dentro de la propia función. Tras compararlos, nos devuelve el mayor de ellos.

La podemos llamar dentro de nuestro programa de varias maneras. Suponemos que ya hemos definido la función y el prototipo:

int main (void)
{
int num1, num2, max;
scanf("%d", &num1);
scanf("%d", &num2);
max =retornaMax(num1, num2);
printf("El mayor es %d\n", max);
return 0;
}
Podemos aplicar la función de otras formas, por ejemplo:

printf ("El mayor es %d\n", retornaMax(num1, num2));
Con lo que ahorramos declarar otra variable.

Debemos tener en cuenta varios detalles, como por ejemplo, si tenemos una variable char, no podemos hacer que tome el valor de una función que nos devuelve, por ejemplo, una cadena de caracteres.

También es importante dar un nombre distinto a las variables dentro de las funciones, como en el ejemplo, que pasamos por procedimiento a num1 y num2, pero dentro de retornaMax procesamos a y b.

En el prototipado, es conveniente separar procedimientos y funciones, para mejorar la visibilidad de nuestro código, quedando así en 2 grupos separados.

¿Qué usar? Depende de lo que queramos conseguir, nos conviene usar o función o procedimiento. Si solo debemos mostrar un par de cosas, por ejemplo, nos convienen procedimientos. Si queremos tener procesos completos, los cuales reciben y envían datos, evidentemente necesitamos usar funciones.

No hay comentarios:

Publicar un comentario