Jewiki unterstützen. Jewiki, die größte Online-Enzy­klo­pädie zum Judentum.

Helfen Sie Jewiki mit einer kleinen oder auch größeren Spende. Einmalig oder regelmäßig, damit die Zukunft von Jewiki gesichert bleibt ...

Vielen Dank für Ihr Engagement! (→ Spendenkonten)

How to read Jewiki in your desired language · Comment lire Jewiki dans votre langue préférée · Cómo leer Jewiki en su idioma preferido · בשפה הרצויה Jewiki כיצד לקרוא · Как читать Jewiki на предпочитаемом вами языке · كيف تقرأ Jewiki باللغة التي تريدها · Como ler o Jewiki na sua língua preferida

Funktion (Programmierung)

Aus Jewiki
Zur Navigation springen Zur Suche springen

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, so dass 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 durchaus 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 i. S. v. Aufgabe.

Funktionale Programmierung

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

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 Variablen gearbeitet werden kann. Insbesondere können Funktionen also als Argument oder Rückgabewert einer anderen Funktion auftreten. Man spricht dann von Funktionen 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 angewendet wird.

Imperative Programmierung

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

Ein Wesensmerkmal für Funktionen (im Gegensatz zu Prozeduren) ist, dass ihr Ergebnis aus Sicht der verwendeten Programmiersprache (sofern sie das Konstrukt 'Funktion' unterstützt) direkt verwendet wird. Codebeispiel für einen Funktionsaufruf, zum Vergleich ein Prozeduraufruf (sprachneutral, nur zur Demonstration):

* Für eine Funktion (hier ohne Aufrufparameter):
 Print "Eingabe = " & (Tastatureingabe)   ; Funktionsaufruf und Ergebnisverwendung implizit
* Für eine Prozedur:
 Call (Tastatureingabe,Ergebnis)          ; Prozeduraufruf als eigene Anweisung (explizit)
 Print "Eingabe = " & Ergebnis            ; ebenso das Verwenden des Ergebnisses

Der Compiler oder Interpreter erzeugt für die Anweisung, in der eine Funktion verwendet wird, Maschinenbefehle, in denen die Funktion implizit aufgerufen und deren Rückgabeergebnis „abgeholt“ sowie dieses Ergebnis der Quellcode-Anweisung entsprechend verwendet wird. Bei Verwendung von Prozeduren entstehen diese Befehle aus getrennten Quellcodeanweisungen.

Beispiele

Pascal

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, das heißt, sie können weitere Funktionen und Prozeduren enthalten.

Argumente werden normalerweise als Wert übergeben (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 (by reference) festzulegen. Dadurch wird nicht der Wert einer Variablen übergeben, sondern ihre Adresse.

C

Argumente werden prinzipiell immer als Wert übergeben (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.

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

In der Automatisierungstechnik werden bei der SPS-Programmierung Funktionen (FCs) sowie Funktionsbausteine (FBs) als bibliotheksfähige Bausteine verwandt.

Literatur

  • 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.
Dieser Artikel basiert ursprünglich auf dem Artikel Funktion (Programmierung) aus der freien Enzyklopädie Wikipedia und steht unter der Doppellizenz GNU-Lizenz für freie Dokumentation und Creative Commons CC-BY-SA 3.0 Unported. In der Wikipedia ist eine Liste der ursprünglichen Wikipedia-Autoren verfügbar.