In diesem Kurs führe ich dich in kleinen Schritten in die Grundlagen der Programmierung ein. Wir nutzen dazu die Anfängerfreundliche Hochsprache "Processing" (ein Java Dialekt).
In diesem Teil geht es um Funktionen.
Was ist eine Funktion?
Funktionen bzw. Methoden sind Code-Blöcke, die nur ausgeführt werden, wenn sie an anderer Stelle explizit aufgerufen werden.
Funktionen ist der Name für diese Codeblöcke, wenn Sie außerhalb von Klassen stehen. Innerhalb von Klassen bezeichnet man sie als Methoden.
Mehrfache Aufrufe des Code-Blocks führen zur mehrfachen Ausführung. Durch die Benutzung von Funktionen bewegen wir uns immer weiter vom imperativen Programmier-Paradigma weg, bei dem der Code einfach von oben nach unten ohne Sprünge ausgeführt wird.
Meistens sind Funktionen gekapselte Funktionalitäten, die man häufiger verwendet. Einige dieser Funktionen haben wir in Form von String-Methoden schon kennengelernt:
Als Programmierer ist es allerdings sehr sinnvoll, auch seinen eigenen Code in Funktionen bzw. Methoden zu strukturieren, d.h. eigene Funktionen zu definieren, die anschließend verwendet werden können.
Funktionskopf und Funktionskörper
Funktionen schreibt man, indem man sie definiert. Die Definition besteht aus den Komponenten Funktionskopf und Funktionskörper.
Im Funktionskopf werden der Name der Funktion, sowie ihre Eigenschaften wie Rückgabetyp und Parameter definiert. Anhand des Funktionskopfes lässt sich ablesen, wie man die Funktion aufzurufen und zu verwenden hat.
Im Funktionskörper steht der eigentliche Code, der ausgeführt wird, wenn die Funktion aufgerufen wird. Man spricht auch von Code, der sich "in der Funktion" befindet. Häufig (aber nicht immer) endet der Funktionskörper mit einem return-Statement, das das Ergebnis der Funktion zurückgibt.
FunktionsnameDer Funktionsname ist ein eindeutiger Name, der gut beschreibt, was die Funktion tut. Zwei verschiedene Funktionen in derselben Datei dürfen nicht den gleichen Namen haben, da sie über den Namen aufgerufen werden (innerhalb v. Methoden in Klassen ist das später anders: Überladung später mehr).
Funktionsnamen werden in Java per Konvention in camelCase geschrieben (d.h. kleiner Buchstabe am Anfang, Folgewörter nicht mit Sonderzeichen trennen, sondern durch Großbuchstaben).
ParameterParameter sind Variablen, die die Funktion von außen entgegennimmt, um sie im Funktionskörper verwenden zu können. Man spricht auch von der Eingabe der Funktion. Die Variablen werden durch Komma getrennt.
Eine Funktion kann keine bis beliebig viele Parameter entgegennehmen, sollte aber üblicherweise nicht mehr als 5 - 6 entgegennehmen, da ansonsten die Übersicht leidet.
Die Variablennamen sind frei wählbar, sondern den Parameter aber gut beschreiben. Jedem Parameter muss der gewünschte Datentyp des Parameters vorangestellt werden.
RückgabetypEine Funktion kann einen Rückgabewert haben, muss sie aber nicht. Soll die Funktion keine Rückgabe haben, ist der Rückgabetyp der Funktion void.
Wenn im Funktionskopf ein anderer Rückgabetyp als void definiert ist, muss im Funktionskörper ein return-Statement stehen, das den entsprechenden Datentyp zurückgibt.
FunktionskörperHier stehen wie gewohnt Anweisungen, z.b. Kontrollstrukturen oder Variablendeklarationen. Es besteht Zugriff auf die Variablen, die der Funktion in Form von Parametern übergeben wurden.
Wenn die Funktion einen Rückgabewert hat, braucht sie auch ein Return-Statement. Umgekehrt gilt: Hat die Funktion keinen Rückgabewert, benötigt sie auch kein Return-Statement. Das Return-Statement beendet die Funktion automatisch. Eine Funktion kann mehrere Return-Statements haben, um in verschiedenen Szenarien die Funktion mit verschiedenen Endergebnissen enden zu lassen.
Geltungsbereich von Variablen in Funktionen
Man kann beliebig viele Funktionen hintereinander definieren, ohne dass sie sich gegenseitig in die Quere kommen. Hierfür sorgt der Variablenskopus, auch Geltungsberich oder Scope genannt.
Funktionen verwenden
Sobald wir in Processing funktional programmieren, sollte sich kein Code außerhalb von Funktionen befinden. Der meiste Code außerhalb von Funktionen führt zu Syntax-Fehlern, nur die Deklaration von globalen Variablen ist erlaubt.
Wenn wir Funktionen verwenden, benötigen wir die "setup()"-Funktion von Processing, ähnlich der Main-Methode in Java. Von setup() aus können wir andere Funktionen aufrufen.
Eine Funktion muss mit so vielen Argumenten aufgerufen werden, wie sie Parameter definiert hat. Man kann beim Funktionsaufruf (zumindest in Processing bzw. Java) weder Argumente hinzufügen noch welche weglassen.
Aufgaben und Quiz
Wie geht es weiter?
Im nächsten Abschnitt machen wir eine kleine Praxis-Übung zur Vertiefung des bisher Gelernten.