Wie kann man Rückrufe in einfachem Englisch erklären? Wie unterscheiden sie sich vom Aufruf einer Funktion aus einer anderen Funktion, die einen Kontext von der aufrufenden Funktion übernimmt? Wie kann ihre Leistungsfähigkeit einem unerfahrenen Programmierer erklärt werden?
Antworten
Zu viele Anzeigen?Im Klartext ist ein Callback ein Versprechen. Joe, Jane, David und Samantha teilen sich eine Fahrgemeinschaft zur Arbeit. Joe fährt heute. Jane, David und Samantha haben mehrere Möglichkeiten:
- Schauen Sie alle 5 Minuten aus dem Fenster, um zu sehen, ob Joe draußen ist.
- Sie ziehen ihr Ding durch, bis Joe an der Tür klingelt.
Option 1: Dies ist eher ein Beispiel für eine Abfrage, bei der Jane in einer "Schleife" feststeckt, um zu prüfen, ob Joe draußen ist. Jane kann in der Zwischenzeit nichts anderes tun.
Option 2: Dies ist das Beispiel für den Rückruf. Jane sagt Joe, er solle an ihrer Tür klingeln, wenn er draußen ist. Sie gibt ihm eine "Funktion", um die Türklingel zu betätigen. Joe muss nicht wissen, wie die Türklingel funktioniert oder wo sie sich befindet, er muss nur diese Funktion aufrufen, d. h. die Türklingel läuten, wenn er da ist.
Rückrufe werden durch "Ereignisse" gesteuert. In diesem Beispiel ist das "Ereignis" die Ankunft von Joe. In Ajax zum Beispiel können Ereignisse "Erfolg" oder "Misserfolg" der asynchronen Anfrage sein, und jedes kann die gleichen oder unterschiedliche Rückrufe haben.
In Bezug auf JavaScript-Anwendungen und Rückrufe. Wir müssen auch "Abschlüsse" und den Anwendungskontext verstehen. Was "dies" bedeutet, kann JavaScript-Entwickler leicht verwirren. In diesem Beispiel könnte es innerhalb der "ring_the_door_bell()"-Methode/des Rückrufs für jede Person einige andere Methoden geben, die jede Person aufgrund ihrer morgendlichen Routine ausführen muss. "turn_off_the_tv()". Wir möchten, dass "this" auf das "Jane"-Objekt oder das "David"-Objekt verweist, so dass jede Person alles andere einrichten kann, was sie tun muss, bevor sie von Joe abgeholt wird. Hier erfordert die Einrichtung des Rückrufs mit Joe eine Parodie der Methode, damit "this" auf das richtige Objekt verweist.
Ich hoffe, das hilft!
Schlicht und einfach: Ein Callback ist eine Funktion, die Sie einer anderen Funktion übergeben, damit diese aufrufen es.
Normalerweise wird sie aufgerufen, wenn ein Vorgang abgeschlossen ist. Da Sie den Callback erstellen, bevor Sie ihn an die andere Funktion übergeben, können Sie ihn mit Kontextinformationen von der Aufrufstelle initialisieren. Deshalb wird sie Call*back* genannt - die erste Funktion ruft in den Kontext zurück, aus dem sie aufgerufen wurde.
Stellen Sie sich eine Methode so vor, dass Sie einem Mitarbeiter eine Aufgabe übertragen. Eine einfache Aufgabe könnte die folgende sein:
Solve these equations:
x + 2 = y
2 * x = 3 * y
Ihr Kollege rechnet fleißig nach und kommt zu folgendem Ergebnis:
x = -6
y = -4
Aber Ihr Kollege hat ein Problem, er versteht nicht immer die Notationen, wie z.B. ^
aber er versteht sie anhand ihrer Beschreibung. Wie zum Beispiel exponent
. Jedes Mal, wenn er einen von ihnen findet, erhalten Sie folgendes zurück:
I don't understand "^"
Das bedeutet, dass Sie Ihren gesamten Anweisungssatz noch einmal neu schreiben müssen, nachdem Sie Ihrem Mitarbeiter erklärt haben, was das Zeichen bedeutet, und er erinnert sich zwischendurch nicht immer daran. Und er hat auch Schwierigkeiten, sich Ihre Tipps zu merken, wie z. B. "Fragen Sie mich einfach". Er befolgt Ihre schriftlichen Anweisungen aber immer so gut er kann.
Wenn Ihnen eine Lösung einfällt, fügen Sie einfach Folgendes zu all Ihren Anweisungen hinzu:
If you have any questions about symbols, call me at extension 1234 and I will tell you its name.
Wenn er jetzt ein Problem hat, ruft er Sie an und fragt nach, anstatt Ihnen eine schlechte Antwort zu geben und den Prozess neu zu starten.
Rückrufe ermöglichen es Ihnen, Ihren eigenen Code in einen anderen Codeblock einzufügen, der zu einem anderen Zeitpunkt ausgeführt werden soll und der das Verhalten dieses anderen Codeblocks nach Ihren Wünschen verändert oder ergänzt. Sie gewinnen an Flexibilität und Anpassungsfähigkeit und können gleichzeitig einen besser wartbaren Code erstellen.
Weniger Hardcode = leichter zu pflegen und zu ändern = weniger Zeitaufwand = mehr Geschäftswert = großartig.
Zum Beispiel, in javascript, mit Underscore.js, könnten Sie alle geraden Elemente in einem Array wie folgt zu finden:
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
=> [2, 4, 6]
Beispiel mit freundlicher Genehmigung von Underscore.js: http://documentcloud.github.com/underscore/#filter