
Funciones I1.1. Que es una función?Una función es una sección de código independiente, con nombre, que ejecuta una tarea específica y opcionalmente devuelve un valor al programa que la llamó. En general toma unos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno; aunque tanto unos como el otro pueden no existir. 1.2. Partes de una funciónAl igual que con las variables, las funciones deben declararse y definirse. Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función.1.2.1. Declaración o PrototipoEn C++ es obligatorio usar prototipos. Un prototipo es una declaración de una función. Consiste en una definición de la función sin cuerpo y terminado con un ";". La estructura de un prototipo es:func(); Por ejemplo: int Mayor(int a, int b);Sirve para indicar al compilador los tipos de retorno y los de los parámetros de una función, de modo que compruebe si son del tipo correcto cada vez que se use esta función dentro del programa, o para hacer las conversiones de tipo cuando sea necesario. Los nombres de los parámetros son opcionales, y se incluyen como documentación y ayuda en la interpretación y comprensión del programa. El ejemplo de prototipo anterior sería igualmente válido y se podría poner como: int Mayor(int,int); Esto sólo indica que en algún lugar del programa se definirá una función "Mayor" que admite dos parámetros de tipo "int" y que devolverá un valor de tipo "int". No es necesario escribir nombres para los parámetros, ya que el prototipo no los usa. En otro lugar del programa habrá una definición completa de la función.En C++ es obligatorio el uso funciones prototipo, y aunque en C no lo es, resulta altamente recomendable. 1.2.2. DefiniciónEn general, la definición de una función se compone de las siguientes secciones:El tipo del valor de retorno, que puede ser "void", si no necesitamos valor de retorno. Si no se establece, por defecto será "int". Aunque en general se considera de mal gusto omitir el tipo de valor de retorno. El nombre de la función. Es costumbre, muy útil y muy recomendable, poner nombres que indiquen, lo más claramente posible, qué es lo que hace la función, y que permitan interpretar qué hace el programa con sólo leerlo. Cuando se precisen varias palabras para conseguir este efecto existen varias reglas aplicables de uso común. Una consiste en separar cada palabra con un "_", la otra, consiste en escribir la primera letra de cada palabra en mayúscula y el resto en minúsculas. Por ejemplo, si hacemos una función que busque el número de teléfono de una persona en una base de datos, podríamos llamarla "busca_telefono" o "BuscaTelefono". Una lista de declaraciones de parámetros entre paréntesis. Los parámetros de una función son los valores de entrada (y en ocasiones también de salida). Para la función se comportan exactamente igual que variables, y de hecho cada parámetro se declara igual que una variable. Una lista de parámetros es un conjunto de declaraciones de parámetros separados con comas. Puede tratarse de una lista vacía. En C es preferible usar la forma "func(void)" para listas de parámetros vacías. En C++ este procedimiento se considera obsoleto, se usa simplemente "func()". Un cuerpo de función que representa el código que será ejecutado cuando se llame a la función. El cuerpo de la función se encierra entre llaves "{}" Una función muy especial es la función "main". Se trata de la función de entrada, y debe existir siempre, será la que tome el control cuando se ejecute un programa en C.Una definición de la función "Mayor" podría ser la siguiente: int Mayor(int a, int b) {if(a > b)return a;elsereturn b;}1.2.3. LlamadoUna función tiene un único nombre, al utilizar éste nombre en otras partes del programa se pueden ejecutar los enunciados contenidos en la función. A esto se le conoce como llamar a la función. Una función puede ser llamada desde otra función.Una función opcionalmente devuelve un valor al programa que la llamó. Cuando un programa llama a una función se ejecutan los enunciados contenidos en ésta, si el programa lo requiere, éstos enunciados pueden devolver un valor al programa que llamó a la función.Cuando un programa llama a una función, la ejecución del código salta a la posición inicial definida por el nombre de la función, el programa ejecuta los enunciados contenidos en ésta y posteriormente el programa que llamó a la función continúa en la línea de código siguiente. Una función bien diseñada ejecuta una tarea específica y fácil de entender. Es recomendable ante una tarea complicada, dividirla en múltiples funciones y entonces llamarlas a su debido momento.1.3. Paso de Parámetros1.3.1. Por ValorEl paso por valor envía copia de los parámetros a la función por lo tanto los cambios que se hagan en ella no son tenidos en cuenta. El siguiente ejemplo ilustra lo anterior.#include void incrementa ( int variable ); //Definición o Prototipomain() {int x = 33;incrementa (x); //Llamado/* x no resulta afectada, sigue valiendo 33 */printf ( "la variable x vale ahora %dn", x );}void incrementa ( int variable ) //Definición {variable ++;}1.3.2. Por ReferenciaEn C el paso por referencia se hace utilizando apuntadores. Se envía la dirección de memoria de la variable, por lo tanto los cambios que haga la función si afectan el valor de la variable.#include void incrementa ( int *variable ); //Definición o Prototipomain() {int x = 33;incrementa (&x); //Llamado /* x si resulta afectada, ahora vale 34 */printf ( "la variable x vale ahora %dn", x );}void incrementa ( int *variable ) { //Definición *variable = *variable + 1;}1.4. Variables Locales y GlobalesAdemás de pasar variables como parte del argumento de una función, también es posible declarar variables dentro del cuerpo de una función, a este tipo de variables se les llama locales ya que sólo son útiles dentro del cuerpo de la función. Los parámetros utilizados en una función se consideran como variables de tipo local y se utilizan exactamente de la misma manera, como lo demuestra el fragmento de código siguiente.int multiplica(int valor1, int valor2) {int local; // variable locallocal = valor1 * valor2;return local;}Los parámetros de la función, ambos de tipo int, llamados valor1 y valor2 son en efecto variables de alcance local al igual que la variable declarada como de tipo int llamada local dentro del cuerpo de la función multiplica( ). El alcance de una variable es simplemente el espacio dentro del código fuente donde la variable puede ser utilizada, generalmente éste espacio está limitado por el par de llaves que sirven para encerrar las líneas de código que conforman una función.A las variables que declaramos fuera del cuerpo de cualquier función se dice que tienen un alcance global y por lo tanto estas funciones están disponibles para cualquier función del programa, incluyendo a main( ). Las variables locales que tienen el mismo nombre que las variables globales no cambian el valor de las globales, sin embargo una variable local con el mismo nombre que una variable global oculta a la variable global
No hay comentarios:
Publicar un comentario