Tag 3 3.Eigene Funktionen

Für unsere bisherigen Programme haben wir bereits einige Funktionen verwendet:

  • setup() – wird einmal am Anfang des Programms ausgeführt
  • draw() – wird vom Sketch automatisch als Schleife ausgeführt
  • mousePressed() – wird einmal ausgeführt, wenn die linke Maustaste gedrückt wird
  • keyPressed()– wird einmal ausgeführt, wenn eine Taste des Keyboards gedrückt wird

Neben den Funktionen, die durch Processing bereits zur Verfügung stehen lassen sich eigene Funktionen schreiben um Programme zu strukturieren. Praktischerweise schreiben wir für bestimmte Aufgaben, die im Code erledigt werden sollen, eine Funktion. Besonders geeignet ist dieses Verfahren für Aufgaben, die immer wieder ausgeführt werden sollen. Dies macht den Code übersichtlicher und man erspart sich die Aufgabe, die gleichen Code-Zeilen immer wieder zu schreiben.

6.1 Aufbau von Funktionen

Funktionen sind aus den Teilen Rückgabedatentyp, Name und Parametern aufgebaut. Sie können einen oder mehrere Parameter aufweisen. Soll kein Wert zurückgegeben werden, so entspricht der Rückgabedatentyp dem Typ void. Soll aber ein Wert rückgegeben werden, so muss der Datentyp einem der bereits im Abschnitt über Variablen kennengelernten (int, float, boolean, etc.) entsprechen. Wird beispielsweise die Funktion get(x,y) ausgeführt um die Farbwerte eines Pixels auszulesen, so liefert sie einen Rückgabewert – den Farbwert des Pixels. Es scheint also Funktionen zu geben, die nicht nur einfach aufgerufen werden um eine Aufgabe still und leise auszuführen, sondern auch Funktionen, die aufgerufen werden um einen Wert ihrer Berechnungen und Abfragen zurückzuliefern. Möchte man eine solche Funktion selbst programmieren, so muss zunächst der Datentyp angegeben werden, den sie zurückliefern soll. Am Ende der Funktion muss der gewünschte Wert mit dem Befehl return zurückgegeben werden:


void setup(){
  float yes = multiply(2,3);
  println(yes);
}

float multiply(float value1, float value2){
   float result = value1 * value2;   
   return result;
}

Die Funktion namens multiply aus obigem Beispiel erwartet zwei Zahlen vom Typ float als Parameter und liefert den float Wert result als Ergebnis zurück.

6.2 Parameter

Über die Parameter einer Funktion werden Werte übergeben, die in der Funktion verarbeitet werden. Die Parameter müssen durch einen Variablen-Typ (int, float, string, etc.) definiert werden.

Beispiel 2-7-2


int amount = 2000;
int stoerungX;
int stoerungY;
int distanz = 150;

void setup(){
  //size(1280,720);
  fullScreen();
  stoerungX = 600;
  stoerungY = 400;

  background(255);
  colorMode(HSB);
  for(int i=0; i < amount; i++){
    circle(random(width), random(height), random(150)); 
    //square(random(width), random(height), random(50,200));
    //cu(random(width), random(height), 150);
  }
}

void draw(){

}

void circle(float x, float y, float radius){
   fill(random(50),100,255,20);
   stroke(0,10);
   ellipse(x, y, radius, radius); 
}

void square(float x, float y, float size){
   fill(random(150,200),100,150,20);
   stroke(0,150);
   rect(x,y,size,size);
}

void cu(float x, float y, float size){
   if((x < stoerungX-distanz || x > stoerungX+distanz) || (y < stoerungY-distanz || y > stoerungY+distanz)){
     println(stoerungY); 
     strokeWeight(3); 
     stroke(random(200,300),255,250, 30);
     line(x,y,x+random(-size,size),y+random(-size,size));
   }
}

void mousePressed(){
   exit(); 
}

6.3 Funktionen ohne Rückgabewert und ohne Parameter

Die einfachste Form von Funktionen führt eine Aufgabe aus und liefert keinen Rückgabewert: void

Beispiel 2-7


void setup(){
  size(800,600);
  for(int i=0; i < 1000; i++){
    circle(); 
  }
}

void circle(){
   float radius = random(10, 50);
   ellipse(random(width), random(height), radius, radius); 
}