Heim >Web-Frontend >js-Tutorial >Funktionszusammensetzung: Bausteine ​​für den Wartungscode

Funktionszusammensetzung: Bausteine ​​für den Wartungscode

Christopher Nolan
Christopher NolanOriginal
2025-02-17 11:19:09761Durchsuche

Function Composition: Building Blocks for Maintainable Code

JavaScript -Funktion Kombination: Erstellen Sie mehr auf dem Wartezustandbare

JavaScript -Funktionszusammensetzung ist eine Technik, um mehrere einfache Funktionen in eine einzelne komplexere Funktion zu kombinieren, die Unterfunktionsvorgänge für eine bestimmte Daten in logischer Reihenfolge ausführt. Die Reihenfolge, in der Funktionen angewendet werden, führt zu unterschiedlichen Ergebnissen.

Um den Code für den Warteur zu schreiben, ist es entscheidend, den Rückgabetyp jeder kombinierten Funktion zu verstehen, um sicherzustellen, dass die nächste Funktion ihn korrekt verarbeiten kann. JavaScript verhindert nicht, dass die Kombination Funktionen unangemessener Typen zurückgibt, sodass dieser Teil der Verantwortung auf den Programmierer liegt.

Für diejenigen, die mit dem funktionalen Programmierparadigma nicht vertraut sind, kann die Kombination von Funktionen den Code kompliziert erscheinen lassen. Mit dem Aufkommen der ES2015 -Syntax mit Pfeilfunktionen ist es jedoch möglich, einfache Kombinationsfunktionen in einer Codezeile zu erstellen, ohne dass spezielle Kombinationsmethoden erforderlich sind.

kombinierte Funktionen sollten reine Funktionen sein, was bedeutet, dass jedes Mal, wenn ein bestimmter Wert an eine Funktion übergeben wird, die Funktion das gleiche Ergebnis zurückgeben sollte und die Funktion keine Nebenwirkungen haben sollte, um ihre eigenen externen Werte zu ändern. Dadurch werden sauberer, lesbarer Code erzeugt.

Dieser Artikel wurde von Jeff Mott, Dan Prince und Sebastian Seitz überprüft. Vielen Dank an alle SitePoint -Peer -Rezensenten, die SidePoint -Inhalte für den Besten erhalten haben!

Function Composition: Building Blocks for Maintainable Code

Einer der Vorteile des funktionalen Denkens ist die Fähigkeit, komplexe Funktionen mit kleinen, leicht verständlichen Einzelfunktionen zu erstellen. Aber manchmal erfordert dies, dass das Problem nicht positiv über das Problem nachdenkt, um herauszufinden, wie die eleganteste Lösung erstellt wird. In diesem Artikel werde ich einen Schritt-für-Schritt-Ansatz verfolgen, um die Kombination von Funktionen in JavaScript zu überprüfen und zu demonstrieren, wie er Code erzeugt, der leichter zu verstehen ist und weniger Fehler hat.

verschachtelte Funktionen

Komposition ist eine Technik, mit der Sie zwei oder mehr einfache Funktionen zu einer komplexeren Funktion kombinieren können, die jede Unterfunktion auf alle in logischen Reihenfolge übergebenen Daten ausführt. Um dieses Ergebnis zu erzielen, müssen Sie eine Funktion in einer anderen nisten und die Operationen der externen Funktion zum Ergebnis der inneren Funktion wiederholen, bis das Ergebnis erzeugt wird. Und die Ergebnisse können je nach Reihenfolge variieren, in der die Funktion angewendet wird. Dies kann leicht anhand von Programmierungstechniken demonstriert werden, die wir bereits in JavaScript kennen, indem ein Funktionsaufruf als Parameter an eine andere Funktion bestanden wird:

<code class="language-javascript">function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8</code>

In diesem Fall definieren wir eine addone () -Funktion, um 1 zu einem Wert hinzuzufügen, und eine timestwo () -Funktion, um einen Wert mit 2 zu multiplizieren. Indem wir die Ergebnisse einer Funktion als Argument an eine andere weitergeben, können wir sehen, wie die Verschachtel eines davon in der anderen unterschiedliche Ergebnisse liefert, auch wenn die Anfangswerte gleich sind. Die innere Funktion wird zuerst ausgeführt und das Ergebnis wird an die äußere Funktion übergeben.

Imperative Kombination

Wenn Sie dieselbe Operationssequenz wiederholen möchten, kann es zweckmäßig sein, eine neue Funktion zu definieren, um die erste und zweite Funktion automatisch anzuwenden. Dies könnte so aussehen:

<code class="language-javascript">function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8</code>

In diesem Fall kombinieren wir die beiden Funktionen manuell miteinander in einer bestimmten Reihenfolge. Wir erstellen eine neue Funktion, die zuerst den bestandenen Wert der Inhabervariablen zuweist, dann den Wert dieser Variablen durch Ausführung der ersten Funktion, gefolgt von der zweiten Funktion, aktualisiert und schließlich den Wert dieses Halters zurückgibt. (Beachten Sie, dass wir eine Variable namens Holder verwenden, um den Wert, den wir übergeben haben Gute Angewohnheit, Werte als Konstanten zu behandeln. Im Gegenteil der Reihenfolge der Anwendung dieser beiden kleineren Funktionen können wir Folgendes tun:

<code class="language-javascript">// ...来自上面的先前函数定义
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10</code>

Natürlich sieht dieser Code sehr wiederholt aus. Unsere beiden neuen kombinierten Funktionen sind nahezu identisch, außer dass die beiden kleineren Funktionen, die sie nennen, unterschiedliche Ausführungsaufträge haben. Wir müssen es vereinfachen (wie uns nicht wiederzuholen). Außerdem ist es nicht sehr funktional, vorübergehende Variablen zu verwenden, die ihren Wert wie diesen ändern, auch wenn er in der kombinatorischen Funktion versteckt ist, die wir erstellen. Fazit: Wir können es besser machen.

Erstellen Sie funktionale Kombinationen

Erstellen wir eine kombinatorische Funktion, die vorhandene Funktionen übernimmt und sie in der gewünschten Reihenfolge kombiniert. Um dies auf konsistente Weise zu tun, ohne jedes Mal mit internen Details umgehen zu müssen, müssen wir die Reihenfolge entscheiden, in der wir die Funktionen als Parameter übergeben möchten. Wir haben zwei Optionen. Die Parameter sind Funktionen, die von links nach rechts oder von rechts nach links ausgeführt werden können. Das heißt, unter Verwendung der neuen Funktion, die wir vorgeschlagen haben, kann das Timestwo (addone ()) komponieren (Timestwo, Addone) zum Lesen von Parametern von rechts nach links oder Addone (Timestwo ()), um Parameter von links nach rechts zu lesen. Der Vorteil der Ausführung von Parametern von links nach rechts besteht darin, dass sie auf die gleiche Weise auf Englisch gelesen werden, was sehr ähnlich ist, wie wir den TimestWoadDone () kombinierter Funktion benannt haben, um zu implizieren, dass eine Multiplikation vor Zugabe stattfinden sollte. Wir alle kennen die Bedeutung einer logischen Benennung für prägnante und leicht zu lesende Code. Der Nachteil der Ausführung von Parametern von links nach rechts besteht darin, dass der zu bedienende Wert vorne platziert werden muss. Wenn Sie den Wert jedoch vor dem Wert vornehmen, sind es weniger bequem, die resultierenden Funktionen mit anderen Funktionen in der Zukunft zu kombinieren. Um den Gedanken hinter dieser Logik gut zu erklären, können Sie nicht über das klassische Video von Brian Lonsdorf hinausgehen. Hey Underscore, du machst es falsch. (Obwohl angemerkt werden sollte, dass Underscore jetzt über eine FP-Option verfügt, die dazu beitragen kann DO ist zuerst alle Konfigurationsdaten übergeben und schließlich den Wert weitergeben, den Sie bedienen möchten. Daher ist es am logischsten, unsere kombinierten Funktionen als das Lesen ihrer Parameter zu definieren und sie von rechts nach links anzuwenden. So können wir eine grundlegende Kombinationsfunktion erstellen, die wie folgt aussieht:

<code class="language-javascript">function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8</code>

Mit dieser sehr einfachen Kombinationsfunktion können wir unsere beiden vorherigen komplexen Funktionen einfacher erstellen und das gleiche Ergebnis sehen:

<code class="language-javascript">// ...来自上面的先前函数定义
function addOneTimesTwo(x) {
  var holder = x;
  holder = addOne(holder);
  holder = timesTwo(holder);
  return holder;
}
console.log(addOneTimesTwo(3)); //8
console.log(addOneTimesTwo(4)); //10</code>

Während diese einfache kombinatorische Funktion funktioniert, berücksichtigt sie nicht viele Probleme, die ihre Flexibilität und Anwendbarkeit einschränken. Zum Beispiel möchten wir möglicherweise mehr als zwei Funktionen kombinieren. Darüber hinaus verlieren wir diese Informationen dabei. Wir können diese Probleme lösen, aber es ist nicht notwendig, die Funktionsweise der Kombination zu beherrschen. Anstatt es selbst zu schreiben und eine leistungsstärkere Kombination aus vorhandenen Funktionsbibliotheken wie Ramda zu erben, berücksichtigt sie standardmäßig die Reihenfolge der Parameter Rechts auf links.

Typ ist Ihre Verantwortung

Es ist wichtig, sich daran zu erinnern, dass der Programmierer die Rückgabetyp jeder kombinierten Funktion kennt, damit die nächste Funktion sie korrekt verarbeiten kann. Im Gegensatz zu reinen funktionalen Programmiersprachen, die eine strenge Typüberprüfung durchführen, hindert JavaScript nicht daran, Funktionen zu kombinieren, die die Werte unangemessener Typen zurückgeben. Sie sind nicht darauf beschränkt, Zahlen zu übergeben, aber nicht einmal den gleichen variablen Typ von einer Funktion zur nächsten. Sie sind jedoch dafür verantwortlich, dass die von Ihnen kombinierte Funktion bereit ist, jeden von der vorherigen Funktion zurückgegebenen Wert zu verarbeiten.

Betrachten Sie Ihr Publikum

Denken Sie immer daran, dass andere Ihren Code in Zukunft möglicherweise verwenden oder ändern müssen. Die Verwendung von Kombinationen im herkömmlichen JavaScript -Code kann für diejenigen kompliziert sein, die mit dem funktionalen Programmierparadigma nicht vertraut sind. Das Ziel ist es, einfacher zu sein und Code zu lesen und zu pflegen. Mit dem Aufkommen der ES2015-Syntax ist es jedoch sogar möglich, einfache Kombinationsfunktionen als Einzelzeilenaufrufe zu erstellen, die Pfeilfunktionen verwenden, ohne dass spezielle Kombinationsmethoden erforderlich sind:

<code class="language-javascript">function addOne(x) {
  return x + 1;
}
function timesTwo(x) {
  return x * 2;
}
console.log(addOne(timesTwo(3))); //7
console.log(timesTwo(addOne(3))); //8</code>

Beginnen wir noch heute zu kombinieren

Wie bei allen funktionalen Programmierechniken ist es wichtig, sich daran zu erinnern, dass Ihre kombinierten Funktionen reine Funktionen sein sollten. Kurz gesagt, dies bedeutet, dass jedes Mal, wenn ein bestimmter Wert an eine Funktion übergeben wird, die Funktion das gleiche Ergebnis zurückgeben sollte und die Funktion nicht die Nebenwirkungen haben sollte, ihre eigenen externen Werte zu ändern. Die Kombinationsverschachtung ist sehr bequem, wenn Sie über eine Reihe von verwandten Funktionen verfügen, die Sie auf Ihre Daten anwenden möchten, und Sie können die Komponenten dieser Funktion in wiederverwendbare und leicht zu kombiniertes Funktionen unterteilen. Wie bei allen funktionalen Programmierechniken empfehle ich, die Kombination zu Ihrem vorhandenen Code mit Vorsicht hinzuzufügen, um sich damit vertraut zu machen. Wenn Sie es richtig machen, ist das Ergebnis sauberer, trockener und leichter Code zu lesen. Ist das nicht das, was wir alle wollen?

(Folgendes ist FAQ, die gemäß dem Originaltext angepasst und optimiert wurden, und doppelte Informationen werden vermieden)

häufig gestellte Fragen zur Funktionskombination und zum Warteurwesen

  • Was ist eine Kombination von Funktionen in der Programmierung? Funktionskombination ist das Konzept, einfache Funktionen in komplexere Funktionen zu kombinieren. Sie können komplexe und leistungsstarke Funktionen mit diesen kleinen wiederverwendbaren Funktionen erstellen, genau wie Bausteine. Dies hilft, den Code lesbarer, leichter zu warten und skalierbarer zu machen.

  • Wie fördert die Funktionskombination den Warteabwartungscode? Funktionskombinationen fördern die Wartbarkeit, indem die Verwendung kleiner, wiederverwendbarer Funktionen gefördert wird. Diese Funktionen sind einfacher zu verstehen, zu testen und zu debuggen. Wenn diese kleinen Funktionen kombiniert werden, um komplexere Funktionen zu erzeugen, ist es einfacher, Probleme zu bestimmen und zu beheben, die möglicherweise auftreten. Dieser modulare Ansatz erleichtert auch die Aktualisierung oder Änderung bestimmter Teile des Codes, ohne das gesamte System zu beeinflussen.

  • Was sind die besten Verfahren zum Schreiben von Wartungscode? Wartungsabteilung beinhaltet eine Reihe von Best Practices, darunter: Funktionen von Funktionen und Konzentration auf eine einzelne Aufgabe; Struktur.

  • Wie besteht die Beziehung zwischen Funktionskombination und funktionaler Programmierung? Funktionskombination ist ein grundlegendes Konzept in der funktionalen Programmierung. Die Funktionsprogrammierung ist ein Beispiel für die Behandlung von Berechnungen als Bewertung mathematischer Funktionen und zur Vermeidung von Änderungszuständen und variablen Daten. In diesem Paradigma spielen Funktionskombinationen eine entscheidende Rolle beim Aufbau komplexerer Funktionen aus einfacheren Funktionen, wodurch die Wiederverwendbarkeit und Wartbarkeit des Codes verbessert wird.

  • Was sind die Herausforderungen bei der Implementierung von Funktionskombinationen? Funktionskombinationen haben viele Vorteile, können aber auch Herausforderungen mit sich bringen. Eine Herausforderung besteht darin, dass dies, wenn sie nicht ordnungsgemäß verwaltet wird, zu schwer zu lesenem Code führen kann, insbesondere bei der Kombination mehrerer Funktionen. Umgang mit Fehlern und Ausnahmen in einer Kette kombinierter Funktionen kann ebenfalls schwierig sein. Diese Herausforderungen können jedoch durch gute Codierungspraktiken und die korrekte Verwendung von Funktionskombinationen gemindert werden.

  • Wie verbessert man Code -Tests mit Funktionskombinationen? Funktionskombinationen können Codetests einfacher und effizienter machen. Da eine kombinierte Funktion aus kleineren, unabhängigen Funktionen besteht, können Sie jede kleine Funktion separat testen. Dies erleichtert die Isolierung und Behebung von Fehler. Es erleichtert auch die Praxis von Unit -Tests, wobei jeder Teil der Software einzeln getestet wird, um sicherzustellen, dass er ordnungsgemäß funktioniert.

Das obige ist der detaillierte Inhalt vonFunktionszusammensetzung: Bausteine ​​für den Wartungscode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Redux ohne ReaktionNächster Artikel:Redux ohne Reaktion