Prädikatsfunktion

Prädikatsfunktion

Eine Rückruffunktion (englisch callback function) bezeichnet in der Informatik eine Funktion, die einer anderen Funktion als Parameter übergeben wird, und von dieser unter gewissen Bedingungen aufgerufen wird. Dieses Vorgehen folgt dem Entwurfsmuster der Inversion of Control.

Dadurch wird es möglich, Funktionen allgemein zu definieren und erst beim Aufrufen der Funktion durch Angabe der Rückruffunktion das Verhalten exakt zu bestimmen. Häufig bekommt eine Rückruffunktion gar keinen Namen, sondern wird als anonyme Funktion direkt beim Aufruf definiert (siehe auch Lambda-Kalkül). Über Rückruffunktionen erreicht man eine lose Kopplung zwischen einzelnen Komponenten.

Beispiel

Es soll eine Funktion apply_to geschrieben werden, die eine beliebige andere Funktion auf eine Liste von Werten anwendet und eine Liste der Ergebnisse zurückgibt. Eine Umsetzung in Pseudocode:

function apply_to (Funktion, Werte):
    var Ergebnis; // Liste für die Ergebnisse

    foreach w in Werte do // für alle Werte ...
        e = Funktion (w); // rufe die Rückruffunktion ...
        Ergebnis[] = e;   // und hänge das Resultat an die Ergebnisliste an.
    end;

    return Ergebnis;
end apply_to;

Diese Funktion kann jetzt folgendermaßen verwendet werden:

function verdoppeln (Wert): // dies ist eine Rückruffunktion
    return Wert * 2;
end verdoppeln;

function quadrat (Wert): // dies ist eine andere Rückruffunktion
    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, kürzer, 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)

Siehe auch

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно решить контрольную?

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”