Anonyme Funktion - LinkFang.de





Anonyme Funktion


Eine anonyme Funktion oder Lambda-Funktion ist eine Funktion in einem Computerprogramm, die nicht über ihren Namen, sondern nur über Verweise wie Referenzen oder Zeiger angesprochen werden kann.

Benannte Funktionen

Eine benannte Funktion erhält bei ihrer Deklaration einen eindeutigen Namen, unter dem sie anschließend angesprochen wird.

Beispiel in Perl

# Deklaration und Definition der Funktion
sub benannteFunktion
  {
  ... Code ...
  }
 
# Aufruf der Funktion
benannteFunktion( ... );

Der Name der Funktion wird vom Compiler oder vom Laufzeitsystem dazu verwendet, mit Hilfe der Symboltabelle oder eines dynamischen Verfahrens die Funktionsdefinition zu identifizieren und dort hinterlegten Code auszuführen.

Beispiel in C++ bzw. C

// Deklaration und Definition
int funktion_mit_name(void)
{
    // ...Code...
}

Anonyme Funktionen

Mit dem Konzept anonymer Funktionen ist es möglich, neben benannten auch unbenannte Funktionen zu definieren.

Beispiel in Common Lisp

(lambda (x) (* x 2))

Um diese Funktion, die einen Wert verdoppelt, im selben Zug zu verwenden, kann sie in Funktionsposition direkt auf das beispielhafte Argument 5 angewendet werden:

((lambda (x) (* x 2)) 5)

Worauf das Lisp-System mit

10

antwortet. Danach wird die Funktionsdefinition, da sie nicht an ein Symbol gebunden ist, durch Garbage Collection gelöscht.

Beispiel in Perl

# Deklaration und Definition der Funktion und Zuweisung an eine (Referenz-)Variable
my $funktionsReferenz = sub { ... };
 
# Aufruf der Funktion
$funktionsReferenz->( ... );

Da die Funktion hierbei keinen Namen hat, ist ein symbolischer Aufruf nicht mehr möglich. Sie wird vielmehr über eine Referenz, einen Verweis auf die Definition, indirekt angesprochen.

Beispiel in D

auto funktions_referenz = delegate int(string str){ int x; /*...*/ return x; };
 
funktions_referenz("Hallo Welt!");

Anonyme Funktionen können die Programmierung kontextabhängiger Funktionsaufrufe sehr stark vereinfachen. Darüber hinaus ermöglichen sie die einfache Verwendung von Funktionsreferenzen als Funktionsargumente, beispielsweise zur Übergabe einer Rückruffunktion (callback), und die Speicherung in Datenstrukturen.

Beispiele in C++11

[capture](params) -> ret { body };
  • capture: Übertrag der angegebenen Variablen in den Gültigkeitsbereich des Lambda-Ausdrucks
  • params: Übergabeparameter
  • -> ret: Rückgabetyp (optional; Pfeil erforderlich)
  • body: Funktionsrumpf
// Da fast jede Lambda-Funktion einen anderen Typ hat, wird ein Funktionstemplate verwendet:
template<typename LambdaTyp>
void rueckrufendeFunktion(LambdaTyp anonyme_funktion)
{
    anonyme_funktion();
}
 
int main()
{
    auto fun = []{ ... };
 
    rueckrufendeFunktion(fun);
 
    return 0;
}

Das verwandte Konzept der Funktionszeiger in den Programmiersprachen C bietet ähnliche Möglichkeiten, ist aber aufgrund seiner Syntax nicht trivial in der Anwendung. Zudem bleibt dort die eigentliche Funktion gleich benannt, separat definierte Verweise darauf können aber beliebige Namen tragen.

In C++ können Funktionszeiger durch Lambda-Ausdrücke ersetzt werden, die, wie in den Beispielen gezeigt, ähnlich wie in Perl oder anderen Sprachen genutzt werden können.

In Java können für diesen Zweck anonyme innere Klassen[1] und ab Version 8 Closures[2] verwendet werden.

Anonyme Funktionen werden von den meisten Skriptsprachen unterstützt, beispielsweise von Perl, Python, Lisp und – in neueren Versionen – von JavaScript und JScript.

Einzelnachweise

  1. Christian Ullenboom: Java ist auch eine Insel. 10., aktualisierte Auflage. Galileo Press, Bonn 2012, ISBN 978-3-8362-1802-3, 7.5 Anonyme innere Klassen .
  2. (hs): Project Lambda: So werden Closures in Java 8 aussehen. In: JAXenter. it republik, 9. September 2011, abgerufen am 19. September 2011.

Weblinks


Kategorien: Programmiersprachelement | Compilerbau

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Anonyme Funktion (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.