En C++ una función no es más que un grupo de declaraciones a las que se les da un nombre y se les puede llamar desde algún punto del programa.
La sintaxis más común para definir una función es:
//sintaxis común de función C++ tipo nombre (parametros) {statements}Dónde:
- tipo es el tipo del valor devuelto por la función.
- nombre es el identificador por el cual se puede llamar a la función.
- Parámetros (todos los que sean necesarios): cada parámetro se parece mucho a una declaración de variable regular (por ejemplo: int x) y de hecho actúa dentro de la función como una variable regular que es local para la función. El propósito de los parámetros es permitir pasar argumentos a la función desde la ubicación desde donde se le llama.
- Statements es el cuerpo de la función. Es un bloque de instrucciones rodeado de llaves {} que especifica qué hace realmente la función.
Echemos un vistazo a un ejemplo práctico:
[tab]
[content title="Uso de Funciones en C ++"]
[/content]
[/tab]
Este programa se divide en dos funciones: addition y main. Recuerde que no importa el orden en que se definan, un programa en C++ siempre comienza llamando a main. De hecho, main es la única función llamada automáticamente y el código de cualquier otra función solo se ejecuta si su función se llama desde main (directa ó indirectamente).
En el ejemplo anterior, main comienza declarando la variable z de tipo int y luego de esto realiza la primera llamada a la función addition. La llamada a una función sigue una estructura muy similar a su declaración. En el ejemplo anterior, la llamada a addition se puede comparar con su definición unas líneas antes.
Los parámetros en la declaración de la función tienen una correspondencia clara con los argumentos pasados en la llamada a la función. La llamada pasa dos valores, que son 5 y 3 a la función; estos corresponden a los parámetros a y b declarados para la función addition.
En el punto en el que se llama a la función desde main, el control pasa a la función addition: aquí ya la ejecución de main se detiene y sólo se reanudará una vez que la función addition finalice. En el momento de la llamada a la función, el valor de ambos argumentos (5 y 3) son copiados para las variables locales int a y int b dentro de la función.
Luego, dentro de addition se declara otra variable local (int r) y mediante la expresión r = a + b, el resultado de la suma se asigna a r; que para este caso (a es 5 y b es 3), significa que 8 se adiciona a r.
La declaración final dentro de la función:
return r;
Finaliza la función addition; y se devuelve el control al punto desde donde se llamó a la función, en este caso a la función main. En este momento preciso, el programa reanuda su curso en main retornando exactamente al mismo punto donde fué interrumpido por llamada a addition. Pero, adicionalmente, como addition tiene un tipo de devolución; la llamada se evalúa como si tuviera un valor y este valor es especificado en la declaración de devolución que finalizó con la suma: en este caso particular, el valor de la variable local r, que al momento de la declaración de devolución tenía un valor de 8.
Por lo tanto, la llamada a addition es una expresión con el valor devuelto por la función y en este caso, ese valor 8 se asigna a z. Es como si toda la llamada a la función (addition(5,3)) hubiera sido reemplazada por el valor que devuelve (es decir, 8).
Entonces main simplemente imprime este valor llamando:
cout << "The result is " << z;
En realidad, se puede invocar una función varias veces dentro de un programa y naturalmente su argumento no esta limitado solo a los literales:
Similar a la función addition en el ejemplo anterior, este ejemplo define una función de resta ó substracción que simplemente devuelve la diferencia del valor de esos dos parámetros. Esta vez, main llama a esta función varias veces, lo que demuestra más formas posibles de llamadas teniendo en cuenta que cada llamada de función es en sí misma una expresión que se evalúa a medida que el valor retorna. Una vez más, usted puede pensar de este como si la llamada a la función ha sido reemplazada por el valor devuelto:
En el caso de:
En el cuarto párrafo todo es nuevamente similar:
Nuevamente, por lógica podríamos ver fácilmente de nuevo a esta, reemplazando las llamadas de función por su valor devuelto:
z = substraccion (7,2); cout << "El primer resultado es " << z;Si reemplazamos la llamada de la función por el valor retirando (es decir,5) tendríamos:
z = 5; cout << "El primer resultado es " << z;Con el mismo procedimiento, podríamos interpretar:
cout << "El segundo resultado es "<< substraccion (7,2);como:
cout << "El segundo resultado es " << 5;Ya que 5 es el valor devuelto por substaccion(7,2).
En el caso de:
cout << "El tercer resultado es " << substraccion(x,y);
Los argumentos pasados en substraccion son variables en lugar de literales. Eso también es válido y funciona muy bien. La función se llama con los x y y que tienen en el momento de la llamada valores de 5 y 3 respectivamente y devuelven 2 como resultado.En el cuarto párrafo todo es nuevamente similar:
z = 4 + substraccion(x,y);La única adición es que ahora la llamada a la función también es un operando de una operación de suma. Nuevamente, el resultado es el mismo como si la función llamada fuese reemplazada por este resultado: 6. Tenga en cuenta que gracias a la propiedad conmutativa de las adiciones, lo anterior se puede también escribir como:
z = substraccion(x,y) + 4;Con exactamente el mismo resultado. Tenga en cuenta también que el punto y coma no necesariamente vá después de la llamada a la función, sino como siempre, al final de la declaración completa.
Nuevamente, por lógica podríamos ver fácilmente de nuevo a esta, reemplazando las llamadas de función por su valor devuelto:
z = 4 + 2; //igual que z = 4 + substraccion(x,y); z = 2 + 4; //igual que z = substraccion(x,y) + 4;
Ahora que hemos llegado hasta aquí, no olvidemos de practicar más y más hasta fijar estos conocimientos; luego pasa al siguiente episodio de este interesante tutorial!
Publicar un comentario