Despatx 234 || 935 421 484
mail

----------------------------------------------------------------
----------------------------------------------------------------

PROGRAMACIÓN: CONCEPTOS || MASTER EN ARTES DIGITALES

Sección 9: Funciones

 


1.- Funciones
Acción de abrir la puerta:
-Ver en qué dirección y distancia está la puerta respecto a quién la debe cerrar
-Girar hacia aquélla dirección
-Avanzar la distancia hacia la puerta
-Alzar la mano hasta agarrar la puerta
-Empujar o tirar hasta cerrarla según sea conveniente

Your browser does not support the canvas tag.

Source code: bitxo

void draw(){
  background(255,127,127);
  drawTheBitxo();
}

Aquí, drawTheBitxo(); invoca una función que hemos creado para dibujar el animalito. Cuando llamamos la función, lo hacemos por su nombre, seguido de paréntesis. En el caso de una función que no recibe parámetros (como este), simplemente habrimos y cerramos paréntesis sin más para indicar a java que nos estamos refiriendo a una función.

Para crear la función, hay que tener en cuenta dos cosas. Si hay retorno (si devuelve o no algún valor), y si tiene parámetros. Como dedicamos a éstas dos cosas sendos apartados en esta sesión, de momento nos centraremos en funciones que no retornan nada y no reciben parámetros.

 

También sería el caso siguiente, donde utilizamos una función para hacer otro dibujo:

sp

void setup(){
  size(200,200);
}
void draw(){
  background(0);

  //invocamos la función, que definimos más adelante:
  dibujaUnSputnik();
}
//He aquí una función que dibuja un SPUTNIK:
void dibujaUnSputnik(){
  strokeWeight(3);
  stroke(255);
  fill(255,0,0);
  line(70,70,130,130);
  line(70,130,130,70);
  ellipse(100,100,35,35);
}

Aquí podemos ver cómo declaramos una función:

void dibujaUnSputnik(){
// instrucciones que forman la función
}

El void debería sonar del SETUP y el DRAW. Es la palabra clave que indica que la función no retorna nada. De la misma manera, los paréntesis en blanco indican que la función no recibe parámetros.

Lo que estas dos cosas significan es que una función así se invocará de la siguiente manera:

dibujaUnSputnik();

Simplemente llamando la función por su nombre y los paréntesis en blanco provocaremos que en el punto en el código donde la función es invocada, el flujo de acciones salta hacia la llave donde empiezan las instrucciones de la función, sigue hasta que la función se cierra, y continúa luego hacia la línea que sigue la invocación. En el ejemplo, vuelve a empezar el DRAW.


 

2.- Parámetros

Your browser does not support the canvas tag.

Source code: sptnk01

...allí donde clicamos...

Your browser does not support the canvas tag.

Source code: sptnk02_clic

...o según una variable de posición:

Your browser does not support the canvas tag.

Source code: sptnk03_pos

void dibujaUnSputnik(int x_, int y_){
  strokeWeight(3);
  stroke(255);
  fill(255,0,0);
  line(x_-30,y_-30,x_+30,y_+30);
  line(x_-30,y_+30,x_+30,y_-30);
  ellipse(x_,y_,35,35);
}

es decir, la reutilizamos. La misma función exactamente en tres sketch distintos. La diferencia está en el momento en que la función es invocada. En el primer y segundo ejemplos, en el DRAW, y en el tercero, en la función de sistema: MOUSEPRESSED, que se ejecuta cuando se clica el mouse.

Pero aquí la función tiene una característica distinta a las del punto anterior. La función dibujaUnSputnik recibe parámetros. Concretamente recibe dos. Dos enteros. De aquí que al declarar la función no dejemos el paréntesis en blanco:

void dibujaUnSputnik(int x_, int y_){

Lo que está dentro del paréntesis son pues los parámetros, que se reciben en forma de variable. Unas variables que hay que declarar como vemos, y que llamamos en este caso x_ e y_.

Los valores que se asignarán a dichas variables serán los de los parámetros que especifiquemos al asignar la función. Así,

dibujaUnSputnik(87, 349){

Asignaría a x_ el valor 87 y a y_ el valor 349 en dicha función. En nuestros ejemplos, lo que se les asigna es otra variable, en este caso variable de sistema, pero que no deja de ser un entero: mouseX y mouseY.


 

3.- Retorno
int resultado;
resultado = calculines(32,439);
int calculines(int a_, int b_){
  int aRetornar;
  aRetornar = (a_+b_)/2;
  return aRetornar;  
}


int dameUnEnteroBonito(){
  //instrucciones
}

Y una que nos ha de devolver un float:

float dameUnFlotador(){
   //instrucciones
}

Y, finalmente, hay que tener SIEMPRE, en una función que retorna algo, una instrucción de retorno al final. Dicha instrucción se llama return y va seguida de un valor que se retorna, valga la redundancia...

float dameUnFlotador(){
   //instrucciones donde flotador es una variable del tipo float
   return flotador;
}

Como siempre, mejor con ejemplos:

Imaginaros que tenemos dos equipos de programadores. Unos tienen que hacer un dibujo según lo rápido que se mueva el mouse. Los otros, contar los píxels blancos. Lo típico, vaya...

Pues con funciones cada equipo podría trabajar por separado y al final integrarlo todo en un solo sketch:

Your browser does not support the canvas tag.

Source code: countdraw2

 


Y otro ejemplo, con envío de parámetros y retorno en una sola función. Podemos utilizar arrays, loops y funciones para hacer cosas como contar la posición media de un grupo de elementos:

Your browser does not support the canvas tag.

Source code: mitja

 


 

4.- Más ejemplos

Your browser does not support the canvas tag.

Source code: bitxorebota

Otro ejemplo del uso de funciones, y de paso de interacción:

Your browser does not support the canvas tag.

Source code: follow

 

----------------------------------------------------------------------------------------------------

Your browser does not support the canvas tag.