民族宗教理论甘肃研究基地专家委员在北京座谈
Eine Funktion (englisch function) ist in der Informatik und in verschiedenen h?heren Programmiersprachen die Bezeichnung eines Programmkonstrukts, mit dem der Programm-Quellcode strukturiert werden kann, sodass Teile der Funktionalit?t des Programms wiederverwendbar sind. Das besondere Merkmal einer Funktion (im Vergleich zum ?hnlichen Konstrukt der Prozedur) ist, dass die Funktion ein Resultat direkt zurückgibt und deshalb in Ausdrücken verwendet werden kann. Die genaue Bezeichnung und Details ihrer Auspr?gung sind in verschiedenen Programmiersprachen unterschiedlich.
Funktionen gelten als spezielle Varianten von Unterprogrammen.
Nicht zu verwechseln ist das Programmkonstrukt ?Funktion‘ mit anderen Bedeutungen des Ausdrucks ?Funktion‘, beispielsweise mit Funktionen im Sinn der Organisation oder der Systemtheorie oder mit Funktion im Sinne von Aufgabe.
Funktionale Programmierung
[Bearbeiten | Quelltext bearbeiten]Das Konzept einer Funktion im Sinne der Mathematik ist in der funktionalen Programmierung am deutlichsten umgesetzt. Hier stellen Funktionen Abbildungsvorschriften dar. Eine Funktion besteht dann aus einer Reihe von Definitionen, die diese Vorschrift beschreiben.
Beispiele
[Bearbeiten | Quelltext bearbeiten]In Haskell würde man zum Beispiel schreiben:
max :: Int -> Int -> Int
max a b | a > b = a
| otherwise = b
Diese Schreibweise erinnert an die mathematische Definition des Maximums zweier Zahlen.
Ein funktionales Programm besteht ausschlie?lich aus Funktionsdefinitionen und besitzt keine Kontrollstrukturen wie Schleifen. Wichtigstes Hilfsmittel für die funktionale Programmierung ist daher die Rekursion.
Funktionen sind in funktionalen Programmiersprachen Objekte, mit denen wie mit beispielsweise Zahlen oder Listen gearbeitet werden kann. So k?nnen Funktionen Argumente und Funktionswerte (Ergebnisse, Rückkehrwerte) anderer Funktionen sein. Eine Funktion, die eine andere Funktion als Argument erwartet, nennt man Funktion h?herer Ordnung. Ein Beispiel hierfür ist das map
-Funktional:
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x : xs) = f x : map f xs
map
nimmt als Argument eine Funktion von a
nach b
, wobei a
und b
beliebige Typen sind (Typvariablen) und liefert als Ergebnis eine neue Funktion, die Listen von a
in Listen von b
abbildet, indem n?mlich f
auf jedes Element der Liste a
angewendet wird.
Imperative Programmierung
[Bearbeiten | Quelltext bearbeiten]Zwar dienen auch in der imperativen Programmierung Funktionen im Prinzip dazu, aufgrund einer Reihe von Argumenten ein Resultat zu berechnen, aber durch die Verwendung von globalen Variablen kann eine Funktion mehr Argumente empfangen, als aus ihrer Argumentliste ersichtlich ist, und kann auf diesem Weg auch mehr als ein Resultat abliefern. ?nderungen in den globalen Variablen einer Funktion werden h?ufig als Nebeneffekt bezeichnet. Damit ger?t das Konzept der Funktion in die N?he der Prozedur, bei der solche ?Nebenwirkungen“ in Wirklichkeit die beabsichtigten Hauptwirkungen sind (siehe dazu Wirkung in der Informatik). Das führt dazu, dass Programmiersprachen oft eine irreführende Terminologie verwenden: In C wird beispielsweise generell nur von Funktionen gesprochen; Prozeduren sind dort Funktionen mit dem Rückgabetyp void
; in Modula-2 dagegen werden auch Funktionen mit dem Schlüsselwort procedure
definiert.
Direktes Verwenden des Ergebnisses
[Bearbeiten | Quelltext bearbeiten]Im Gegensatz zu Prozeduren geben Funktionen einen Wert zurück, der direkt verwendet werden kann. Prozeduren, die keinen Rückgabewert haben, k?nnen nur indirekt Ergebnisse liefern, indem entweder Referenzparameter oder globale Variablen ver?ndert werden.
Die Programmiersprache Pascal bietet eine explizite Unterscheidung für Funktionen und Prozeduren. Eine Funktion increment
, welche eine Zahl um eins erh?ht, kann folgenderma?en definiert werden:
function increment(variable: Integer): Integer;
begin
increment := variable + 1;
end;
Bei einer Prozedur kann das Berechnungsergebnis nur indirekt zurückgegeben werden wie beispielsweise über Referenzparameter.
procedure increment(variable: Integer, var reference: Integer);
begin
reference := variable + 1;
end;
W?hrend das Ergebnis bei einem Funktionsaufruf direkt genutzt werden kann, muss das Ergebnis bei einer Prozedur zuerst in einer Variablen gespeichert werden, da die Variable als Parameter übergeben wird.
program main;
var
variable: Integer;
begin
// Aufruf einer Funktion
writeln(increment(3));
// Aufruf einer Prozedur
increment(3, variable);
writeln(variable);
end;
Beispiele
[Bearbeiten | Quelltext bearbeiten]Pascal
[Bearbeiten | Quelltext bearbeiten]Pascal unterscheidet zwischen Funktionen und Prozeduren:
- Funktionen werden mit dem Schlüsselwort
function
deklariert und liefern einen Rückgabewert mit einem definierten Typ. Funktionsaufrufe stehen innerhalb von Ausdrücken. Die Festlegung des Rückgabewerts erfolgt durch eine (Pseudo-)Zuweisung an den Funktionsnamen. Als Nebenwirkung k?nnen Funktionen aber den Zustand des Programms ver?ndern, indem n?mlich globale Variablen neue Werte erhalten. - Prozeduren werden mit dem Schlüsselwort
procedure
deklariert und haben keinen definierten Rückgabewert. Ihre Wirkung kann sich deshalb nur in den ?nderungen globaler Variablen zeigen.
Beispiel einer Funktionsvereinbarung in Pascal:
function summe(a: Integer; b: Integer): Integer;
begin
summe := a + b;
end;
Beispiel eines Funktionsaufrufs in Pascal:
ergebnis := summe(1, 2);
Funktionen und Prozeduren sind in Pascal im Gegensatz zu C schachtelbar. Dies bedeutet, dass sie weitere Funktionen und Prozeduren enthalten k?nnen.
Argumente werden normalerweise als Wertparameter übergeben (call / pass by value). Der Wert einer Variablen, die einer Funktion (oder Prozedur) als Argument übergeben wird, wird durch deren Ausführung nicht ver?ndert. Es ist aber auch m?glich, mit dem Schlüsselwort var
die übergabe als Referenz (call by reference) festzulegen. Dadurch wird nicht der Wert einer Variablen übergeben, sondern ihre Adresse.
Argumente werden prinzipiell immer als Wertparameter übergeben (call / pass by value). Soll eine übergebene Variable ver?ndert werden, so übergibt man deren Adresse, also einen Pointer. Die Bestimmung des Rückgabewertes geschieht durch eine return
Anweisung. Funktionen in C sind nicht schachtelbar. Allerdings liefern einige C-Compiler nicht standardisierte Erweiterungen aus, welche eine Schachtelung erm?glichen.
Beispiel einer Funktionsvereinbarung in C:
int summe(int a, int b) {
return a + b;
}
Beispiel eines Funktionsaufrufs in C:
ergebnis = summe(1, 2);
Automatisierungstechnik: SPS-Programmierung
[Bearbeiten | Quelltext bearbeiten]In der Automatisierungstechnik werden bei der SPS-Programmierung Funktionen (FCs) sowie Funktionsbausteine (FBs) als bibliotheksf?hige Bausteine verwandt.
Literatur
[Bearbeiten | Quelltext bearbeiten]- Siegfried Grohmann, Dirk Papendieck, OStR Peter Westphal-Nagel: Automatisierungstechnik mit Simatic S7. Programmierprojekte für die berufliche Aus- und Weiterbildung. 3., überarbeitete und aktualisierte Auflage, Elektronik-Praktiker-Verlag (EPV), Duderstadt 2009, ISBN 978-3-936318-75-3, 160 Seiten.