www.wikidata.de-de.nina.az
Eine anonyme Funktion Funktionsliteral Lambdafunktion oder Lambdaausdruck ist eine Funktionsdefinition die nicht an einen Bezeichner gebunden ist Anonyme Funktionen werden haufig als Argumente an Funktionen hoherer Ordnung ubergeben oder zum Erstellen des Ergebnisses einer Funktion hoherer Ordnung verwendet die eine Funktion zuruckgeben muss Wenn eine Funktion nur an einer Stelle verwendet wird und einen begrenzten Umfang hat kann eine anonyme Funktion syntaktisch einfacher sein als die Verwendung einer benannten Funktion Anonyme Funktionen sind in funktionalen Programmiersprachen und anderen Sprachen mit First Class Funktionen allgegenwartig wo sie fur den Funktionstyp dieselbe Rolle erfullen wie Literale fur andere Datentypen Anonyme Funktionen wurden ursprunglich von Alonzo Church mit seiner Erfindung des Lambda Kalkuls im Jahr 1936 gepragt in dem alle Funktionen anonym sind Anonyme Funktionen sind seit Lisp im Jahr 1958 ein Merkmal von Programmiersprachen und eine wachsende Anzahl moderner Programmiersprachen unterstutzt anonyme Funktionen Inhaltsverzeichnis 1 Benannte Funktionen 2 Beispiele 2 1 Common Lisp 2 2 C 2 3 C 2 4 Haskell 2 5 Java 2 6 JavaScript 2 7 Python 3 EinzelnachweiseBenannte Funktionen BearbeitenIm Gegensatz zu einer anonymen Funktion erhalt eine benannte Funktionen bei ihrer Deklaration einen eindeutigen Bezeichner unter dem sie anschliessend angesprochen wird 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 auszufuhren Beispiel in JavaScript function Bezeichner meiner Funktion console log Hallo Welt Bezeichner meiner Funktion Beispiele BearbeitenCommon Lisp Bearbeiten Die folgende Funktion verdoppelt ihr Argument lambda x x 2 Um diese Funktion im selben Zug zu verwenden kann die Funktion direkt auf ein Argument angewendet werden lambda x x 2 5 Der Wert dieses Ausdrucks ist 10 Das nachste Beispiel definiert eine Funktion hoherer Ordnung und nennt sie meinFilter Das erste Argument dieser Funktion ist eine weitere Funktion Im unteren Teil des Beispiels wird fur dieses Argument der lambda Ausdruck angegeben defun meinFilter eigenschaft liste cond null liste nil if funcall eigenschaft car liste cons car liste meinFilter eigenschaft cdr liste meinFilter eigenschaft cdr liste print meinFilter lambda wert mod wert 2 0 0 1 2 3 4 5 6 7 8 9 Das Ergebnis der Berechnung ist 0 2 4 6 8 C Bearbeiten Lambdaausdrucke bieten semantisch ahnliche Moglichkeiten wie das verwandte Konzept der Funktionszeiger In C konnen anonyme Funktionen folgendermassen definiert werden capture lt template gt parameter gt type body capture Ubertrag der angegebenen Symbole in den Gultigkeitsbereich des Lambda Ausdrucks template Liste der Templateparameter parameter Liste der Ubergabeparameter type Ruckgabetyp body Funktionsrumpf include lt functional gt include lt iostream gt include lt vector gt using namespace std vector lt int gt meinFilter function lt bool int gt eigenschaft const vector lt int gt amp liste auto sieb vector lt int gt sieb reserve liste size for int element liste if eigenschaft element sieb push back element return sieb int main vector lt int gt liste 0 1 2 3 4 5 6 7 8 9 auto sieb meinFilter int wert return wert 2 0 liste for int element sieb cout lt lt element lt lt return 0 C Bearbeiten using System using System Collections Generic delegate bool Funktion int wert class Programm static List lt int gt meinFilter Funktion eigenschaft List lt int gt liste var sieb new List lt int gt sieb Capacity liste Count foreach var element in liste if eigenschaft element sieb Add element return sieb public static void Main string args var liste new List lt int gt 0 1 2 3 4 5 6 7 8 9 var sieb meinFilter wert gt wert 2 0 liste foreach int element in sieb Console Write element Haskell Bearbeiten meinFilter eigenschaft liste element element lt liste eigenschaft element main print meinFilter wert gt mod wert 2 0 0 9 Java Bearbeiten In Java mussten fur diesen Zweck fruher anonyme innere Klassen 1 verwendet werden Ab Version 8 stehen sogenannte Lambda Ausdrucke zur Verfugung 2 import java util ArrayList import java util Arrays import java util function IntPredicate import java util List class Main static List lt Integer gt meinFilter IntPredicate eigenschaft List lt Integer gt liste var sieb new ArrayList lt Integer gt for Integer element liste if eigenschaft test element sieb add element return sieb public static void main String args var liste Arrays asList 0 1 2 3 4 5 6 7 8 9 var sieb meinFilter wert gt wert 2 0 liste for var element sieb System out print element JavaScript Bearbeiten function meinFilter eigenschaft liste let sieb for let element of liste if eigenschaft element sieb push element return sieb let liste 0 1 2 3 4 5 6 7 8 9 console log meinFilter wert gt wert 2 0 liste Python Bearbeiten def meinFilter eigenschaft liste sieb for element in liste if eigenschaft element sieb append element return sieb liste 0 1 2 3 4 5 6 7 8 9 print meinFilter lambda wert wert 2 0 liste Einzelnachweise Bearbeiten Christian Ullenboom Java ist auch eine Insel 13 aktualisierte Auflage Galileo Press Bonn 2017 ISBN 978 3 8362 5869 2 8 5 Anonyme innere Klassen openbook galileocomputing de Angelika Langer Lambda Ausdrucke und Methoden Referenzen November 2013 abgerufen am 17 April 2020 Abgerufen von https de wikipedia org w index php title Anonyme Funktion amp oldid 233823590