jueves, 1 de mayo de 2014

La estructura de una función




Una función es un bloque de código que tiene una cabecera y un cuerpo. En el lenguaje C estándar, la definición y declaración de la función se hacen en el fichero de cabecera (*.h).  Sin embargo el IDE del Arduino nos hace la vida más sencilla, y si necesitamos declarar una función, podemos hacerlo dentro del mismo código del programa principal (sketch).

Por ejemplo, si queremos crear una función que sume dos números enteros y nos devuelva el resultado, la llamada a la función podría ser algo así como

miSuma (número1, número2);

y nos devolvería el siguiente  = número1+número 2

Pero para que lo anterior lo entienda el IDE de Arduino como la declaración de una función, hace falta escribir el código siguiendo una serie de reglas concretas:

REGLA 1.-  Hay que definir cada tipo de elemento que vaya a usar o generar, para que pueda tratarlo convenientemente. No es lo mismo que te digan “vierte un litro de agua y en un litro de aceite” que nos digan “coge una tonelada de arena y un metro cúbico de cemento”. Para lo primero nos hará falta “reservar” un par de botellas de nuestra despensa y para los segundo tendremos que “reservar” alguna cuba industrial de las que se usan en las construcciones. Pues bien, nuestro Arduino, como nosotros tiene recursos limitados, y por ello necesita anticipar qué uso de su memoria tendrá que dedicar a cada cosa, y reservar ese espacio para que no se use en ningún otro proceso.

REGLA 2.- Hay que ponerle un nombre único a la función, para que podamos usarla cada vez que queramos. Algo representativo de lo que va a hacer, por ejemplo, encederLaBombilla, subirLaTemperatura, etc..

REGLA 3.-En caso de que la función vaya a devolver un valor, por ejemplo en el ejemplo anterior donde teníamos una función llamada miSuma, hay que ponerle un nombre a la variable donde se va almacenar el resultado, sin olvidar que le tenemos que aplicar la primera regla también, y tenemos que definir el tipo de resultado que va a suministrar (un texto, un valor numérico, etc..)

REGLA 4.- Hay que definir exactamente lo que va a hacer la función, en nuestro ejemplo de la función miSuma, pues sería algo al estilo

 resultado= número1+número2

REGLA 5.- Hay que definir si la función devolverá algún resultado o por el contrario consiste solo en la ejecución se una serie de instrucciones concretas. En nuestro caso usaremos que queremos que nos devuelva el resultado de la ecuación, sería algo como

return resultado

REGLA 6.- No hay que olvidarse de las llaves. Para que el IDE de Arduino sepa de qué se compone nuestra función, hay que usar un par de llaves, una tras definir el nombre de la función y otra, cerrando, tras la última instrucción. A fin de cuentas es como un bocadillo, todos son diferentes, los tenemos de tortilla, de chorizo, … pero siempre están contenidos entre dos trozos de pan.




Pues bien ahora que sabemos las seis reglas necesarias para definir una función, veamos como quedaría nuestra función miSuma.

int miSuma (int número1, int número 2)
{
            int  resultado;
            resultado = número1  + número 2;
            return resultado;
}

Como vemos :
  1. lo primero que hemos dicho es definir que tipo de función vamos a crear. En nuestro caso le hemos dicho que la función miSuma será un número entero (integer en inglés, int para el IDE), y tras ello (aplicando la sexta regla) abrimos una llave para especificar que lo que sigue será lo que definirá la función,
  2. lo segundo que hemos hecho es ponerle un nombre único a la función: miSuma. Por convección se comienza en minúscula y se concatena las palabras empezándolas por mayúsculas para facilitar su lectura. Y además le hemos dicho que para ejecutar esta función requerirá que le pasen dos cosas, a estas cosas, se le llaman Argumentos, y como aplicamos la primera regla,  definimos qué clase de argumentos serán, texto, número, o lo que sea, en nuestro caso también serán, cada uno de ellos, enteros (integer en inglés, int para el IDE), así mismo (aplicando la tercera regla) a cada objeto que se le pase, además de definir qué tipo de argumentos serán, tendremos que ponerle un nombre para luego poder hacer uso de él cuando haga falta,
  3. lo tercero que hacemos es definir el nombre de la variable donde guardaremos el resultado de la función, y aplicando la primera regla, definimos el tipo de resultado que será, en nuestro caso (integer en inglés, int para el IDE),
  4. lo cuarto que hacemos es definir concretamente qué es lo que va a hacer nuestra función,
  5. lo quinto, definir que queremos que una vez calculada la fórmula, queremos que nos devuelva el resultado, eso lo hacemos usando la palabra reservada return, y finalmente
  6. lo sexto, cerramos la función con una llave.
Notad que:
1.- Existen una serie de palabras reservadas que no se pueden usar para ningún otro propósito que el definido para ellas en el IDE. En nuestro ejemplo están marcadas en naranja, y son int (para referirnos a números enteros) y return (para ordenar a la función a que devuelva el resultado cuando termine de ejecutarse).
2.- Que después de cada sentencia acabamos con ";", para indicarle al IDE que hemos llegado al fin de una sentencia. A excepción de la declaración inicial de la función que no termina en ";" sino abriendo una llave "{".
3.- Que hemos formateado el texto, incluyendo una sangría a la derecha, con objeto de facilitar la lectura, aunque no es requisito del IDE, que se rige solo por las llaves y los ";"





No hay comentarios:

Publicar un comentario