www.wikidata.de-de.nina.az
Eine Ruckruffunktion englisch Callback bezeichnet in der Informatik eine Funktion die einer anderen Funktion meist einer vorgefertigten Bibliotheks oder Betriebssystemfunktion als Parameter ubergeben und von dieser unter definierten Bedingungen mit definierten Argumenten aufgerufen wird Dieses Vorgehen folgt dem Entwurfsmuster der Inversion of Control Meistens erlaubt die vorgefertigte Funktion die Ubergabe eines sog Benutzerparameters lpParameter der von ihr neben anderen Argumenten zur Ruckruffunktion durchgereicht wird damit letztere im Kontext des ursprunglichen Aufrufers Daten sowohl abgreifen wie ablegen kann Inhaltsverzeichnis 1 Ruckruf im selben Ablauf 2 Ruckruf aus einem anderen Thread 3 Dauerhafte Ruckrufroutine 4 Einfache Ruckruffunktion oder objektorientierter Ruckruf 5 Beispiele 5 1 JavaScript 5 2 C 6 Siehe auch 7 Weblinks 8 EinzelnachweiseRuckruf im selben Ablauf Bearbeiten nbsp Das Bild zeigt einen Aufruf einer Routine eines anderen Kontextes Betriebssystemaufruf anderes Softwaremodul Diesem Aufruf wird eine Referenz auf die Ruckrufroutine ubergeben Die aufgerufene Routine kann dann in ihrem Ablauf die Ruckrufroutine aufrufen Die Ruckrufroutine legt letztlich Daten ab die im weiteren Programmablauf nach Ruckkehr des ursprunglichen Aufrufes verwendet werden konnen In der englischen Literatur wird diese Form als blocking callback oder synchronous callback bezeichnet Der Vorteil dieser Technik besteht darin dass der Zugriff auf die Daten im eigenen Kontext formuliert wird und oder im Ruckruf eine beliebige programmtechnische Aufbereitung erfolgen kann Die Parameter und der Aufrufzeitpunkt werden im anderen Softwaremodul bestimmt die Bestimmung was im Ruckruf ausgefuhrt wird obliegt dem eigenen Softwaremodul Dadurch wird ermoglicht Funktionen allgemein zu definieren und erst beim Aufrufen der Funktion durch Angabe der Ruckruffunktion das Verhalten exakt zu bestimmen Haufig bekommt eine Ruckruffunktion gar keinen Namen sondern wird als anonyme Funktion direkt beim Aufruf definiert siehe auch Lambda Kalkul Uber Ruckruffunktionen erreicht man eine lose Kopplung zwischen einzelnen Komponenten Ruckruf aus einem anderen Thread Bearbeiten nbsp Bei Angabe einer Ruckruffunktion ist es der aufgerufenen Funktion uberlassen wann diese den Ruckruf ausfuhrt Inversion of Control Es ist moglich dass der Ruckruf zu einem spateren Zeitpunkt aus einem anderen Thread heraus erfolgt Das nebenstehende Bild zeigt das Prinzip Die Zuordnung der Ruckrufroutine zum eigenen Kontext ist die Gleiche wie im obigen Schema Da der Ruckruf in einem anderen Thread erfolgen kann sind aber zusatzlich die Bedingungen fur eine Datenkonsistenz Mutex einzuhalten In der englischen Literatur wird diese Form als deferred callback oder asynchronous callback bezeichnet Ein Beispiel dafur ist der Aufruf SetTimer hWnd ident milliseconds callbackRoutine in der Windows API Der Aufruf SetTimer ist ein kurzer Betriebssystemaufruf der nur im Betriebssystem den Timer initialisiert Die callbackRoutine wird erst dann aufgerufen wenn die Zeit abgelaufen ist Das geschieht in einem Thread des Betriebssystems unabhangig vom Ablauf nach dem Aufruf von SetTimer In der bereitzustellenden Ruckrufroutine kann beliebiger Code ausgefuhrt werden Es ist allerdings dabei zu beachten dass die Ruckrufroutine nur kurz und nicht blockierend sein darf Sonst besteht die Gefahr dass das gesamte Betriebssystem oder mindestens der aktuelle Prozess blockiert Letztlich sollte die Ruckrufroutine eigentlich nur Daten ablegen und nicht selbst komplexe Aktionen beinhalten Insbesondere kann fur eine ereignisorientierte Programmierung eine Event Instanz erzeugt und abgelegt werden die weitere Ablaufe steuert Dauerhafte Ruckrufroutine BearbeitenEine Ruckrufroutine kann nur jeweils fur einen Aufruf gelten Die Ruckrufroutine kann in Bezug zum Aufruf auch mehrmals gerufen werden bis die zugehorige Aktion beendet ist also zeitlich begrenzt Aber auch die dauerhafte Zuordnung einer Routine wird teilweise als callback routine bezeichnet beispielsweise ThreadProc callback function 1 Bei der Anlage eines Threads uber die Windows API wird die Threadfunktion als callback function angegeben Die Zuordnung einer Ereignisbehandlungsroutine beispielsweise zu einem HTML Element lt button onclick function gt oder zu einem Widget innerhalb einer Programmierung grafischer Benutzeroberflachen folgt demselben Schema wird aber in diesem Zusammenhang gewohnlich nicht als callback sondern als event handler bezeichnet Einfache Ruckruffunktion oder objektorientierter Ruckruf BearbeitenDie sogenannten callback function in der Windows API sind jeweils einfache C Funktionen Die Windows API wird als C Schnittstelle bereitgestellt In Foren gibt es haufig Fragen nach der Moglichkeit C Funktionen zuzuordnen Notwendig ist hier eine Kapselung des C Aufrufes in einer C Funktion die die Dateninstanz kennt Anders ist es in objektorientierten Ansatzen eines Ruckrufes Statt der Angabe eines Funktionszeigers wird die Referenz auf ein Datenobjekt fur den Ruckruf ubergeben Das Datenobjekt muss ein fur den Ruckruf bestimmtes Interface realisieren Das Interface enthalt dann mehrere mogliche Ruckruffunktionen in der Tabelle virtueller Methoden innerhalb der Dateninstanz und kennt gleichzeitig die notwendigen Daten fur die Ausfuhrung des Ruckrufes Das Grundschema ist genau das gleiche wie in den obigen Schemata gezeigt Beispiele BearbeitenEs soll eine Funktion apply to geschrieben werden die eine beliebige andere Funktion auf eine Liste von Werten anwendet und eine Liste der Ergebnisse zuruckgibt Eine Umsetzung in Pseudocode function apply to ruckruffunktion werte var ergebnis Liste fur die Ergebnisse foreach w in werte do fur alle Werte e ruckruffunktion w rufe die Ruckruffunktion ergebnis e und hange das Resultat an die Ergebnisliste an end return ergebnis end apply to Diese Funktion kann jetzt folgendermassen verwendet werden function verdoppeln wert dies ist eine Ruckruffunktion return wert 2 end verdoppeln function quadrat wert dies ist eine andere Ruckruffunktion return wert wert end quadrat Anwenden der Funktionen auf eine Liste werte 1 2 3 4 doppelte Werte apply to verdoppeln werte ergibt 2 4 6 8 quadrierte Werte apply to quadrat werte ergibt 1 4 9 16 Oder kurzer in Lambda Notation werte 1 2 3 4 doppelte Werte apply to lambda x x 2 werte ergibt 2 4 6 8 quadrierte Werte apply to lambda x x x werte ergibt 1 4 9 16 JavaScript Bearbeiten Ruckrufe werden bei der Implementierung von Programmiersprachen wie JavaScript verwendet einschliesslich der Unterstutzung von JavaScript Funktionen als Ruckrufe uber js ctypes und in Komponenten wie addEventListener Im folgenden Beispiel wird zunachst eine Funktionsberechnung mit einem fur den Ruckruf bestimmten Parameter definiert rueckruffunktion Dann wird eine Funktion definiert die als Ruckruf zur Berechnung verwendet werden kann berechneSumme Fur rueckruffunktion konnen andere Funktionen verwendet werden z B berechneProdukt In diesem Beispiel wird berechne zweimal aufgerufen einmal mit berechneSumme als Ruckruf und einmal mit berechneProdukt Die Funktionen geben das Summe bzw Produkt die zuruck und die Warnung zeigt sie auf dem Bildschirm an function berechne zahl1 zahl2 rueckruffunktion return rueckruffunktion zahl1 zahl2 function berechneSumme zahl1 zahl2 return zahl1 zahl2 function berechneProdukt zahl1 zahl2 return zahl1 zahl2 Gibt 20 die Summe von 5 and 15 aus alert berechne 5 15 berechneSumme Gibt 75 das Produkt von 5 und 15 aus alert berechne 5 15 berechneProdukt C Bearbeiten public class Hauptklasse static void Main string args Nebenklasse objekt new Nebenklasse Ruft die Methode von Nebenklasse mit Ruckruffunktion als Parameter auf objekt Aufrufmethode Rueckruffunktion Diese Ruckruffunktion gibt den im Ruckruf angegebenen Text aus static void Rueckruffunktion string text Console WriteLine Der Ruckruf lautet text public class Nebenklasse Diese Methode hat eine andere Methode als Parameter und ruft diese auf public void Aufrufmethode Action lt string gt rueckruf Ruft die Methode Rueckruffunktion in Hauptklasse mit der der angegebenen Textnachricht aus rueckruf Ich komme sofort zuruck Siehe auch BearbeitenHook Informatik Signal Slot KonzeptWeblinks BearbeitenHook und Callback Funktionen mit PHP deutsches Tutorial Einfuhrung in Ruckruffunktionen mit JavaScript JavaScript Callbacks How to Implement Callback Functions Microsoft Docs Einzelnachweise Bearbeiten msdn microsoft Abgerufen von https de wikipedia org w index php title Ruckruffunktion amp oldid 214834724