Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Funktionale Programmierung / Funktionen höherer Ordnung

Subroutinen zurückgeben

Eine Subroutine kann auch eine Subroutine zurückgeben. Damit bauen Sie im laufenden Betrieb neue Funktionen, zugeschnitten auf die Argumente, die Sie mitgeben:

sub adder($n) {
    sub ($x) { $x + $n };
}

my &add5 = adder(5);
say add5(3); # 8

adder(5) baut eine anonyme Subroutine, die 5 zu ihrem Argument addiert, und liefert sie zurück. Wir legen sie in &add5 ab und rufen sie wie jede andere Subroutine auf. adder(10) aufzurufen ergäbe einen anderen Addierer, der zehn addiert.

Beachten Sie, dass sich die zurückgegebene Subroutine den Wert von $n aus dem Aufruf merkt, der sie erzeugt hat — add5 behält seine 5 auch dann, wenn adder längst fertig ist. Eine Subroutine, die Werte aus dem Bereich einfängt, in dem sie erzeugt wurde, heißt Closure, das Thema des nächsten Abschnitts.

Funktionen zurückzugeben ist ein knapper Weg, ganze Familien verwandter Operationen zu erzeugen, ohne sich zu wiederholen: Eine adder-Definition liefert unbegrenzt viele bestimmte Addierer.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Quiz — Subroutinen übergeben   |   Quiz — Funktionen höherer Ordnung


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.