Wikipedia · einfach zusammengefasst · Stand
Funktion (Programmierung)
Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, …
Inhalt4 Abschnitte
Grundidee und Abgrenzung
Eine Funktion ist in der Informatik und in höheren Programmiersprachen ein Programmkonstrukt zur Strukturierung von Quellcode. Teile der Funktionalität eines Programms können dadurch wiederverwendet werden. Funktionen sind spezielle Varianten von Unterprogrammen.
Ihr besonderes Merkmal gegenüber der ähnlichen Prozedur ist, dass sie ein Resultat direkt zurückgibt. Daher kann ein Funktionsaufruf in Ausdrücken verwendet werden. Die genaue Bezeichnung und Ausgestaltung ist je nach Programmiersprache verschieden. Das Programmkonstrukt darf nicht mit anderen Bedeutungen von „Funktion“ verwechselt werden, etwa einer Funktion im Sinn von Organisation, Systemtheorie oder Aufgabe.
Funktionen in der funktionalen Programmierung
In der funktionalen Programmierung entspricht eine Funktion besonders deutlich dem mathematischen Funktionsbegriff: Sie ist eine Abbildungsvorschrift. Eine Funktion besteht aus Definitionen, welche diese Vorschrift beschreiben.
Ein funktionales Programm besteht ausschließlich aus Funktionsdefinitionen und hat keine Kontrollstrukturen wie Schleifen. Deshalb ist Rekursion, also das erneute Aufrufen einer Funktion durch sich selbst, das wichtigste Hilfsmittel.
Funktionen sind dabei Objekte, mit denen wie mit Zahlen oder Listen gearbeitet werden kann. Sie können Argumente oder Funktionswerte, also Ergebnisse beziehungsweise Rückkehrwerte, anderer Funktionen sein. Eine Funktion höherer Ordnung erwartet eine andere Funktion als Argument.
Das Funktional map hat den Typ map :: (a -> b) -> [a] -> [b]. Die Typvariablen a und b stehen für beliebige Typen. map erhält eine Funktion von a nach b und bildet eine Liste von a auf eine Liste von b ab, indem diese Funktion auf jedes Listenelement angewendet wird. Die Definition lautet:
map f [] = []
map f (x : xs) = f x : map f xs
Auch die Haskell-Definition von max beschreibt das Maximum zweier ganzer Zahlen: max :: Int -> Int -> Int; bei a > b ist das Ergebnis a, andernfalls b.
Funktionen, Prozeduren und Nebeneffekte
Auch in der imperativen Programmierung berechnen Funktionen grundsätzlich aus einer Reihe von Argumenten ein Resultat. Globale Variablen können jedoch dazu führen, dass eine Funktion weitere, nicht in ihrer Argumentliste sichtbare Argumente erhält und mehr als ein Resultat liefert. Änderungen globaler Variablen heißen häufig Nebeneffekte.
Dadurch ähnelt eine Funktion einer Prozedur. Bei Prozeduren sind solche Nebenwirkungen oft die beabsichtigten Hauptwirkungen. Die Terminologie der Sprachen kann deshalb irreführend sein: In C heißt das Konstrukt generell Funktion; eine Prozedur ist dort eine Funktion mit dem Rückgabetyp void. In Modula-2 werden dagegen auch Funktionen mit dem Schlüsselwort procedure definiert.
Eine Funktion gibt einen Wert zurück, der unmittelbar weiterverwendet werden kann. Eine Prozedur ohne Rückgabewert kann Ergebnisse nur indirekt liefern, etwa durch das Verändern von Referenzparametern oder globalen Variablen. In Pascal kann deshalb writeln(increment(3)); den Wert einer Funktion direkt ausgeben. Bei einer Prozedur muss ein Ergebnis zuerst über eine als Parameter übergebene Variable gespeichert werden, etwa durch increment(3, variable); und anschließend writeln(variable);.
Pascal, C und SPS-Bausteine
Pascal unterscheidet ausdrücklich zwischen Funktionen und Prozeduren. Funktionen werden mit function deklariert, besitzen einen Rückgabewert eines festgelegten Typs und können innerhalb von Ausdrücken aufgerufen werden. Der Rückgabewert wird durch eine Pseudo-Zuweisung an den Funktionsnamen festgelegt, zum Beispiel summe := a + b;. Dennoch können Funktionen als Nebeneffekt globale Variablen verändern. Prozeduren werden mit procedure deklariert, haben keinen definierten Rückgabewert und können ihre Wirkung daher nur durch Änderungen globaler Variablen zeigen.
In Pascal können Funktionen und Prozeduren geschachtelt werden, also weitere Funktionen und Prozeduren enthalten. Argumente werden normalerweise als Wertparameter übergeben: Die übergebene Variable wird durch die Ausführung nicht verändert. Mit var kann Referenzübergabe festgelegt werden; dann wird statt des Werts die Adresse der Variablen übergeben.
In C werden Argumente immer als Wertparameter übergeben. Soll eine Variable verändert werden, muss ihre Adresse als Pointer übergeben werden. Der Rückgabewert wird mit einer return-Anweisung festgelegt. C-Funktionen sind nicht schachtelbar; einige C-Compiler bieten dafür nicht standardisierte Erweiterungen. Ein Beispiel ist int summe(int a, int b) { return a + b; }, aufgerufen mit ergebnis = summe(1, 2);.
In der Automatisierungstechnik werden bei der SPS-Programmierung Funktionen (FCs) und Funktionsbausteine (FBs) als bibliotheksfähige Bausteine verwendet.