Files
freeCodeCamp/curriculum/challenges/german/02-javascript-algorithms-and-data-structures/functional-programming/introduction-to-currying-and-partial-application.md
2022-08-19 20:53:29 +02:00

2.4 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7dab367417b2b2512b70 Einführung in Currying und partielle Anwendung 1 301232 introduction-to-currying-and-partial-application

--description--

Die Anzahl der Argumente, die eine Funktion benötigt, nennt man die Natur der Funktion. Das Currying einer Funktion bedeutet, dass eine Funktion der Ordnung N in N Funktionen der Ordnung 1 transformiert wird.

Mit anderen Worten: Eine Funktion wird so umstrukturiert, dass sie ein Argument annimmt und dann eine andere Funktion zurückgibt, die das nächste Argument annimmt, und so weiter.

Hier ist ein Beispiel:

function unCurried(x, y) {
  return x + y;
}

function curried(x) {
  return function(y) {
    return x + y;
  }
}

const curried = x => y => x + y

curried(1)(2)

curried(1)(2) würde 3 zurückgeben.

Das ist in deinem Programm nützlich, wenn du nicht alle Argumente für eine Funktion auf einmal angeben kannst. Du kannst jeden Funktionsaufruf in einer Variablen speichern, die die zurückgegebene Funktionsreferenz enthält, die das nächste Argument übernimmt, wenn es verfügbar ist. Hier ist ein Beispiel, in dem die Curried-Funktion aus dem obigen Beispiel verwendet wird:

const funcForY = curried(1);
console.log(funcForY(2)); // 3

In ähnlicher Weise kann partielle Anwendung als Anwendung einiger Argumente auf eine Funktion und die Rückgabe einer anderen Funktion, die auf weitere Argumente angewendet wird, beschrieben werden. Hier ist ein Beispiel:

function impartial(x, y, z) {
  return x + y + z;
}

const partialFn = impartial.bind(this, 1, 2);
partialFn(10); // 13

--instructions--

Fülle den Körper der Funktion add so aus, dass sie Currying verwendet, um die Parameter x, y und z hinzuzufügen.

--hints--

add(10)(20)(30) sollte 60 zurückgeben.

assert(add(10)(20)(30) === 60);

add(1)(2)(3) sollte 6 zurückgeben.

assert(add(1)(2)(3) === 6);

add(11)(22)(33) sollte 66 zurückgeben.

assert(add(11)(22)(33) === 66);

Dein Code sollte eine abschließende Anweisung enthalten, die x + y + z zurückgibt.

assert(code.match(/[xyz]\s*?\+\s*?[xyz]\s*?\+\s*?[xyz]/g));

--seed--

--seed-contents--

function add(x) {
  // Only change code below this line


  // Only change code above this line
}

add(10)(20)(30);

--solutions--

const add = x => y => z => x + y + z