Nachdem Sie neben Skripten im vorherigen Abschnitt auch gelernt haben was Funktionen sind und wie man diese erstellt, ist es natürlich interessant die beiden Inhalte einmal zu vergleichen, um zu sehen, worin sie sich unterscheiden. Dazu werden verschiedene Punkte in der untenstehenden Tabelle aufgelistet, in denen sie sich unterscheiden bzw. Gemeinsamkeiten haben.

Vergleichspunkt Skript Funktion
Symbolik Rechnen Rechnen
Namensgebung beliebig Funktionsname
Syntax beliebige Aneinanderreihung von Anweisungen verpflichtender Funktionskopf vor der Aneinanderreihung von Anweisungen
Eingabe** input-Befehl für Variablendefinition (eher unüblich)/Im Skript fest definiert Variablen im Funktionskopf hinter dem Funktionsnamen
Ausgabe** disp-Befehl zur Ausgabe von Text oder Variablen Variablen im Funktionskopf hinter dem Begriff function*
Variablenraum*** Alle verwendeten Variablen werden im workspace hinterlegt Benutzt einen eigenen Variablenraum, das heißt die innerhalb der Funktion verwendeten Variablen tauchen nicht im workspace auf
Anweisungen beliebige Nutzung von Befehlen beliebige Nutzung von Befehlen unter dem Funktionskopf
Aufruf Über den Namen des Skriptes Über den Funktionsnamen und die nötigen Eingabewerte in runden Klammern

*Hierbei ist zu beachten, dass man eine Funktion im Command Window ausführen kann und die Ausgabe dann in der ans-Variablen erfolgt. Genauso ist es möglich vor den Funktionsnamen z.B. a = ... zu setzen, dann wird das Ergebnis der Funktion in der Variablen a gespeichert.
Achtung: Dies ist vor allem dann wichtig zu wissen, wenn es mehr als einen Ausgabewert geben soll. Hat die Funktion beispielsweise den Kopf function[a,b] = NamederFunktion(x,y), so gibt es zwei Ausgabewerte. Führt man die Funktion nun einfach aus, wird jedoch immer nur der erste Wert ausgegeben. Hat eine Funktion also mehr als einen Wert, den sie ausgibt, muss man entsprechend einen Vektor voranstellen, um alle Ergebnisse zu erfassen: [a,b] = NamederFunktion(x,y)
Bei drei Ausgabewerten stellt man entsprechend einen dreikomponentigen Vektor voran usw.

**Achtung: So wie in der Tabelle aufgeführt, die Eingabe über input und die Ausgabe über disp (später fprintf, siehe Kapitel IV) wird ausschließlich in Skripten verwendet und niemals in einer Funktion. Alle Werte die für die Funktion benötigt werden, erscheinen hinter dem Namen in der Runden klammern. Die Ausgabe erfolgt ausschließlich über die Variablen hinter function.
Die Funktion dient einzig und allein dazu häufig genutzte Dinge zu automatisieren und den Code zu verkürzen. Sie dient in der Regel nicht dazu ein benutzerfreundliches Design zu entwerfen. Dies geschieht ausschließlich in Skripten. Das bedeutet auch, das Funktionen Skripte nicht ersetzen, sondern, dass die beiden Inhalte in Koexistenz harmonieren und gleichzeitig genutzt werden. Das heißt, man gestaltet die Eingabe und Ausgabe in einem Skript, in der man die Funktion(en) letztlich aufruft, aber fügt diese Befehle nie in die Funktion, welche die gewünschten Werte ausrechnet, selbst ein.
Dabei wird der input-Befehl beim fortgeschrittenen Programmieren nicht mehr dazu verwendet bestimmte Daten, wie z.B. Vektoren einzulesen sondern höchstens um ein Art Auswahlmenü zu erstellen. (Z.B. die Frage nach der Funktion die verwendet werden soll. Bei 1 wird der Sinus bei 2 der Kosinus bei der Ausführung des Skriptes verwendet.)
Natürlich gibt es für jede Regel auch eine aufweichende Ausnahme. Man kann den Befehl fprintf (Kapitel IV) in einer Funktion nutzen, aber nur wenn man die verwendeten Werte nicht explizit in dieser Funktion ausrechnet, sondern sie ausschließlich für die grafische Darstellung nutzt. Das heißt z.B., dass der Vektor der Ausgabevariablen leer sein muss, da diese Funktion nichts errechnet und die Werte, welche dargestellt werden sollen, stehen in den Eingabevariablen. Damit wird deutlich, dass man bei Funktionen immer strikt zwischen denen trennt, die Werte errechnen und denen die für die Automatisierung zur Gestaltung optischer Inhalte genutzt werden.

***Um den genauen Unterschied zwischen Skript und Funktion zu verstehen, ist es wichtig zu wissen mit welchen Variablen die einzelnen Elemente arbeiten und was es bedeutet einen eigenen Variablenraum zu haben. Zunächst gibt es für alle Skripte nur den allgemeinen Variablenraum, den sie schon kennen: den workspace. Alle Variablen, die in einem Skript verwendet oder definiert werden, erscheinen dort und können weiter genutzt werden. Das heißt, führt man zunächst ein Skript aus in dem die Variablen a und b definiert werden und danach ein zweites Skript, indem ebenfalls a und b ein Wert zugewiesen wird, kann man sehen, dass die Werte die durch Skript eins gesetzt wurden, überschrieben werden. Das heißt also alle Skripte nutzen den workspace als Variablenraum und überschreiben gegebenfalls früher gesetzte Variable.
Eine Funktion bietet jetzt den Vorteil, das jede ihren eigenen Variablenraum hat, was dadurch auffällt, dass alle in einer Funktion verwendeten Variablen nicht im workspace auftauchen. Das bedeutet, dass alles, was in der Funktion definiert wird, nur innerhalb der Funktion gilt. Bei Skripten kann es leicht passieren, das falsche Ergebnisse erscheinen, weil sie auf Variablen im workspace zugreifen, was sie gar nicht sollen. Dies passiert bei Funktionen nicht.
Des Weiteren wird jetzt klar, wofür man den Funktionskopf nutzt. Die Eingabevariablen dienen dazu, dass ich Inhalte aus dem workspace in den Variablenraum der Funktion hineinziehe. In diesem werden dann die Anweisungen ausgeführt und am Ende werden aus diesem Raum die Ergebnisse zurück in den workspace überführt. Sei es in der Form einer bestimmten Variablen oder der ans-Variablen.

Rechnen

Im obenstehenden Bild sehen Sie einmal eine grobe Verdeutlichung des Ablaufs. Zunächst sind nur die Variablen a und b im allgemeinen Variablenraum. Diese werden dann über den Aufruf der Funktion in den Variablenraum der Funktion übergeben (Natürlich wäre es auch möglich direkt Funktionsname(5,6) einzugeben). Dort befinden sich zusätzlich neben a und b nur für die Funktion geltende Variablen. Dann werden mithilfe dieser Werte alle Anweisungen ausgeführt. Am Ende wird der Ausgabevariablen innerhalb der Funktion ein Wert zugewiesen. Dieser wird dann an die ans-Variablen im workspace über- und als Ergebnis ausgegeben.

Nachdem Sie nun die Grundlagen für das Arbeiten mit Funktionen haben sowie die Unterschiede zwischen Skripten und Funktionen kennen, werden sie im nächsten Teilabschnitt etwas über die Fehler lernen, welche auftreten können. Ein neues Arbeitsmittel bringt neben Vorteilen (z.B. eigener Variablenraum) auch neue mögliche Fehlerquellen mit sich.

News

01. April 2015 | Grundversion verfügbar

Inhalt:

Marcus Bether, Michael Klöppel

Technische Umsetzung:

Marcus Bether, Michael Klöppel

Kontakt:

Jörg Wensch
E-Mail: