Processing/JS

Funciones

Escribir funciones:

void, return

Una function es una modulo que contiene un programa, ya hemos empleado funciones incluidas en Processing como son: size(), line(), stroke(), y translate() en nuestros programas, pero es tambien possible escribir nuestras propias funciones. Se emplean para hacer cosas redundantes, que van a ser ejecutadas varias veces. Hace más sencilla la programación y reduce los errores.

Las funciones tienen parámetros que definen sus acciones, así la función line() tiene 4 parámetros que definen las coordenadas de los dos puntos principio y final de la línea.

Cambiando estos parámetros cambiamos la posición y longitud de la línea.

Las funciones pueden operar diferentemente dependiendo del número de parámetros, es el caso de la función fill() un parámetro define el valor de gris, dos definen el gris y la trasparencia, tres definen los valores RGB del color y cuatro el color y la trasparencia.

La function podemos imaginarla como una caja con mecanismos internos que actuan sobre los datos.

Un ejemplo típico, una entrada produce una salida, por ejemplo una función que suma 10 al valor de entrada, o una función con dos parámetros que los multiplica y da como salida el resultado de este producto.

Las matemáticas complejas que son usadas dentro de una función pueden desalentar, pero la ventaja de usar funciones es que no tenemos que entender cómo funcionan, es suficiente con saber cómo se usan. Este proceso se llama Abstracción, que tiene un significado diferente que en el arte, aquí es algo parecido a conducir sin saber cómo funciona un motor de explosión.

Crear funciones

Vamos a analizar un ejemplo antes de empezar a crear nuestras propias funciones, en los siguientes ejemplos se muestra como emplear funciones.

Dibujar un ojo:

Ojo

void setup() {
size(100, 100);
noStroke();
smooth();
noLoop();
}

void draw() {
fill(255);
ellipse(50, 50, 60, 60); // círculo blanco
fill(0);
ellipse(50+10, 50, 30, 30); // círculo negro
fill(255);
ellipse(50+16, 45, 6, 6); // pequeño, círculo blanco
}

Vemos que es necesario emplear 6 líneas de código para dibujar tres elipses, para dibujar dos ojos, 6 elipses.

Vamos a crear una función, llamada eye que resuelva el dibujo de los ojos:

void eye(int x, int y) {
fill(255);
ellipse(x, y, 60, 60);
fill(0);
ellipse(x+10, y, 30, 30);
fill(255);
ellipse(x+16, y-5, 6, 6);
}

en el programa usamos noLoop() en el setup() para que sólo se ejecute el draw() una vez.

void setup() {
size(100, 100);
noStroke();
smooth();
noLoop();
}
void draw() {
eye(65, 44);
eye(20, 50);
eye(65, 74);
eye(20, 80);
eye(65, 104);
eye(20, 110);
}
void eye(int x, int y) {
fill(255);
ellipse(x, y, 60, 60);
fill(0);
ellipse(x+10, y, 30, 30);
fill(255);
ellipse(x+16, y-5, 6, 6);
}

Return

Es una palabra clave que se usa para indicar el valor de retorno de una función.

type function {
statements
return value
}

type boolean, byte, char, int, float, String, boolean[], byte[], char[], int[], float[], or String[]
function La función que se define
statements acciones
value debe ser del mismo tipo que los parametros empleados en la función.

Ejemplo:

int[] vals = {10, 20, 30};

void draw() {
int[] t = timestwo(vals);
println(t);
noLoop();
}

int[] timestwo(int[] dVals) {
for (int i = 0; i < dVals.length; i++) {
dVals[i] = dVals[i] * 2;
}
return dVals; // devuelve un array de 3 números enteros: 20, 40, 60
}