Programme werden mit zunehmenden Anforderungen unübersichtlich lang. Daher versucht man sie in kleine logische Einheiten zu zerlegen.
Eine Möglichkeit dies zu tun sind sogenannte Funktionen.
In dem folgenden Beispiel ist die Erzeugung einer einfachen Grafik in einfacher und strukturierter Form dargestellt. Wenn die Funktionen entsprechend gute Namen erhalten, erübrigt sich oft das Einbringen von Kommentaren.
Variante ohne Funktionen | Varianten mit Funktionen |
---|---|
size(180,180);
background(220,220,250); stroke(0); strokeWeight(0); //Zeichne Umriss fill(255,0,0); ellipse(90, 90, 160, 170); // Zeichne Augen fill(0,255,0); ellipse(60, 45, 36, 22); ellipse(120, 45, 36, 22); // Zeichne Nase fill(0,255,255); ellipse(90, 90, 18, 45); // Zeichne Mund fill(0,0,255); ellipse(90, 135, 60, 18); |
void setup() {
size(180,180); background(220,220,250); stroke(0); strokeWeight(0); } void zeichneUmriss(int posX, int posY){ fill(255,0,0); ellipse(posX, posY, 160, 170); } void zeichneAuge(int posX, int posY) { fill(0,255,0); ellipse(posX, posY, 36, 22); } void zeichneNase(int posX, int posY) { fill(0,255,255); ellipse(posX, posY, 18, 45); } void zeichneMund(int posX, int posY) { fill(0,255,255); ellipse(posX, posY, 60, 18); } void draw() { zeichneUmriss(90, 90); zeichneAuge(60, 45); zeichneAuge(120, 45); zeichneNase(90,90); zeichneMund(90, 135); } |
Im Beispiel sind zwei Arten von Funktionen, mit und ohne Argumente, zu erkennen:
Mit Argumenten lässt sich das Verhalten der Funktion steuern, so könnte der Umriss hier auch an einer anderen Stelle gezeichnet werden.
Die Funktionen können fast beliebige Namen erhalten. Auch die Argumente kann man frei wählen. Die Festlegung eines Arguments erfolgt wie eine Variablendeklaration.
Neben dem Vorteil, eine übersichtlichere Form zu erhalten, werden Funktionen genutzt um einfach mehrfache Dinge zu tun. So lässt sich die oben darstellte Variante noch ein wenig ergänzen und man kann mit wenig Zeilen Code die nebenstehende Grafik erzeugen:
void zeichneGesicht(int posX, int posY) {
zeichneUmriss(posX, posY);
zeichneAuge(posX-30, posY-45);
zeichneAuge(posX+30, posY-45);
zeichneNase(posX, posY);
zeichneMund(posX, posY+45);
}
void draw() {
zeichneGesicht(90, 90);
zeichneGesicht(270, 90);
zeichneGesicht(270, 270);
zeichneGesicht(90, 270);
}
Übungen zu Funktionen
Code aufräumen
Der dargestellte Code erzeugt eine Hausdarstellung.
// Grundeinstellungen
size(160,220);
background(220,220,250);
stroke(0);
strokeWeight(1);
// Hausumrissint sx=10;
int sy=10;
int bx=140;
int by=200;
line(sx,sy+by, sx, by/2);
line(sx, by/2, sx+bx/2, sy);
line(sx+bx/2, sy, sx+bx, by/2);
line(sx+bx,sy+by, sx+bx, by/2);
line(sx,by/2, sx+bx, by/2);
line(sx,sy+by, sx+bx, sy+by);
// Türint tuer_x=20;
int tuer_y=150;
fill(255,0,0);
rect(tuer_x, tuer_y, 30, 60);
// Fenster 1int fenster1_x= 70;
int fenster1_y= 130;
fill(0,255,0);
rect(fenster1_x, fenster1_y, 30, 30);
// Fenster 2int fenster2_x= 110;
int fenster2_y= 130;
fill(0,255,0);
rect(fenster2_x, fenster2_y, 30, 30);
Bringen Sie Ordnung in den Programmcode, indem Sie das Programm in folgende Funktionen aufteilen:
void zeichneUmriss(int posX)
void zeichneTür(int posX)
void zeichneFenster(int posX, int posY)
Nach erfolgreicher Aufteilung soll die Zeichnung in einer draw-Funktion wie folgt funktionieren:
void draw() {
zeichneUmriss(10);
zeichneTuer(20);
zeichneFenster(70, 130);
zeichneFenster(110, 130);
}
Reihenhaussiedlung
Erweitern Sie den Code mit einer Funktion zum Zeichnen eines Hauses an einer bestimmten x-Position.
Lassen Sie mit Hilfe dieser Funktion eine Reihenhaussiedlung entstehen …