Werkzeugkoffer Teil 1

Funktionen

Charakter
Bildquelle: Diana Lange

In dem Beispiel „Charakter zeichnen“ haben mehrere von Euch bereits viele Zeilen Code geschrieben. Um nicht immer wieder alle Zeilen lesen zu müssen, um deren Funktionsweise zu verstehen, empfiehlt es sich zusammenhängende Abschnitte in einzelne Funktionen zu gliedern.

Eine Funktion setzt sich aus den Elementen Rückgabewert, Funktionsname und Argumenten/Parametern zusammen.

Beispiel:

returnType functionName (arguments)
{
// Anweisungen
}

Der Aufbau unterscheidet sich vom Grundsatz nicht von den Funktionen setup() und draw(), die Processing automatisch aufruft.

Rückgabewert

Der Rückgabewert (returnType) definiert, ob die Funktion etwas zurück gibt. Bis dato haben wir stehts Funktionen verwenden, die als Rückgabe void definiert hatten, was bedeutet, dass sie keinen Rückgabewert haben.

Parameter

Ein Beispiel für eine Funktion mit Rückgabewert ist random( max ), die uns eine zufällig generierte Gleitkommazahl zwischen Null und dem angegebenen Limit max zurückgibt. Eine andere Funktion wäre calculateSum( value1, value2 ), die die beiden Parameter addiert und zurückgibt. Somit wäre in diesem Fall der Rückgabewert float oder int, je nachdem wie präzise man das Ergebnis benötigt.

Der Einsatz von Parametern bietet den Vorteil, dass man von außen je nach Bedarf verschiedene Werte in die Funktionen geben kann, um sie universeller nutzen zu können. Zum Beispiel kann man mit der Funktion rect( x, y, width, height ) verschiedene Rechtecke zeichnen. Zu beachten ist dabei, dass für jedes Parameter ein Datentyp zu definieren ist, Parameter nur innerhalb der Funktion verfügbar sind und jedes Parameter bei der Benutzung der Funktion auch angegeben werden muss.

Funktionsname

Die Namenswahl der eigenen Funktionen gestaltet sich analog zu der Namenswahl der eigenen Variablen. Sprich das Hauptziel sollte sein, dass der Name beschreibend ist, damit jemand fremdes bzw. man selbst nach einigen Wochen noch weiß, was innerhalb des Programmes passiert.

Mehr zum Thema Bezeichnung von Variablen, Funktionen etc. werden wir in einer der folgenden Vorlesungen besprechen.

Gliederung

Entscheidend für heute ist eine sinnvolle Gliederung der Zeichenvorgänge innerhalb des Beispieles „Charakter zeichnen“.

Beispielhafte Funktionen dafür wären drawHead, drawArms, drawLegs etc. Wichtig dabei ist, dass richtige Gleichgewicht zu finden, zwischen zu wenigen und zu vielen Funktionen. Nicht jeder einzelne Schritt ( setColorForLegs() ) benötigt eine eigene Funktion. Auf der anderen Seite ist es ein guter Indikator für zu viele Aufgaben innerhalb einer Funktion, wenn die passende Namensfindung schwer fällt.

Der Einwand, dass man sich die Programmabschnitte auch mit Kommentaren gliedern und trennen kann, ist nachvollziehbar. Aber neben der besseren Gliederung haben Funktionen auch den Vorteil, dass sie die Wiederverwendbarkeit von Code enorm erhöhen.

Werkzeugkoffer aufbauen

Wenn Ihr Euch einmal diese Werkzeuge geschrieben habt, wandern sie in Euren virtuellen Werkzeugkoffer. Der Werkzeugkoffer ist Euer Ideenpool, der sich nach und füllen wird, um Eure Gestaltungsideen zu kreieren.

Um das Füllen zu beschleunigen empfiehlt sich natürlich das Tauschen von Werkzeugen.

Hausaufgabe

Programmiert zwei Beispiele, bei denen ihr Euch im ersten Schritt verschiedene Werkzeuge erstellt. Bei der Kombination der Werkzeug sollt ihr Euch bewusst auf maximal drei Farben beschränken, die im Idealfall gut zusammen passen. Zu beiden Beispielen sind auch die Sketch-Dateien mit abzugeben.

Bedenkt dabei den sinnvollen Einsatz von Farben, Typografie und die allgemeine Aufteilung der Grafik. Wenn euch der Einsatz von Text derzeit schwer fällt, verzichtet lieber auf dieses weitere Element.

Die dritte Aufgabe führt Euch in die Natur, wo ihr mindestens drei verschiedene Detailaufnahmen von Blüten machen sollt.

Informationen zum Dateiformat, der Bezeichnung und zum Upload der Dateien ist unter dem Punkt Prüfungsleistung zu finden.

Die Beispiele der Woche können hier herunter geladen werden.