Heim > Web-Frontend > js-Tutorial > Was ist funktionale Programmierung?

Was ist funktionale Programmierung?

William Shakespeare
Freigeben: 2025-02-10 11:08:08
Original
629 Leute haben es durchsucht

What Is Functional Programming?

Kernpunkte

  • funktionale Programmierung ist ein Programmierparadigma, das die Invarianz, erstklassige Funktionen, Zitiertransparenz und reine Funktionen betont. Es hilft, elegante, wartbare, skalierbare und vorhersehbare Code zu schreiben.
  • Die Kernprinzipien der funktionalen Programmierung umfassen reine Funktionen (Funktionen ohne Nebenwirkungen oder Operationen, die nicht mit der Funktionsleistung zusammenhängen), Invarianz (keine direkte Änderung von Daten), erstklassige Funktionen (Funktionen können wie jeder andere Wert verwendet werden ) und hohe Ordnung (eine Funktion, die eine Funktion als eine oder mehrere seiner Parameter oder als Funktion nimmt, die eine Funktion zurückgibt).
  • Die funktionale Programmierung generiert einen modularen Code, der einfacher zu debuggen und zu testen ist. Da Funktionsaufrufe über mehrere Kerne verteilt werden können, kann dies auch die Recheneffizienz verbessern.
  • Das funktionale Programmierungsprinzip kann in jede Programmiersprache aufgenommen und in Verbindung mit anderen Programmierstilen wie objektorientierter Programmierung verwendet werden. Auch wenn sie nicht nur verwendet werden, können sie im Code positive Ergebnisse erzielen.

Als Programmierer möchten Sie vielleicht elegante, wartbare, skalierbare und vorhersehbare Code schreiben. Die Prinzipien der funktionalen Programmierung (FP) können sehr helfen, diese Ziele zu erreichen.

funktionale Programmierung ist ein Paradigma oder Stil, das die Invarianz, erstklassige Funktionen, Zitiertransparenz und reine Funktionen hervorhebt. Wenn Sie die Bedeutung dieser Wörter nicht verstehen, mach dir keine Sorgen! Wir werden all diese Begriffe in diesem Artikel aufschlüsseln.

funktionelle Programmierung stammt aus λ Calculus, einem mathematischen System, das sich um Funktionsabstraktion und Verallgemeinerung dreht. Daher scheinen viele funktionale Programmiersprachen sehr mathematisch zu sein. Die gute Nachricht ist jedoch: Sie müssen keine funktionale Programmiersprache verwenden, um funktionale Programmierprinzipien auf Ihren Code anzuwenden. In diesem Beitrag werden wir JavaScript verwenden, das viele Funktionen enthält, die es für die funktionale Programmierung geeignet machen, ohne auf dieses Paradigma beschränkt zu sein.

Kernprinzipien der funktionalen Programmierung

Jetzt, da wir diskutiert haben, was funktionale Programmierung ist, sprechen wir über die Kernprinzipien hinter FP.

reine Funktion

Ich betrachte Funktionen als Maschinen gerne - sie akzeptieren Eingaben oder Parameter und geben dann etwas aus, d. H. Rückgabeteile. Reine Funktionen haben keine "Nebenwirkungen" oder Operationen, die unabhängig von der Funktionsleistung sind. Einige potenzielle Nebenwirkungen umfassen Druckwerte oder Aufzeichnungen mit console.log oder manipulierender Variablen außerhalb der Funktion.

Dies ist ein Beispiel für eine Nicht-Pure-Funktion:

let number = 2;

function squareNumber() {
  number = number * number; // 非纯操作:操作函数外部的变量
  console.log(number); // 非纯操作:控制台记录值
  return number;
}

squareNumber();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die folgende Funktion ist eine reine Funktion. Es akzeptiert Eingabe und erzeugt Ausgabe.

let number = 2;

function squareNumber() {
  number = number * number; // 非纯操作:操作函数外部的变量
  console.log(number); // 非纯操作:控制台记录值
  return number;
}

squareNumber();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

reine Funktionen laufen unabhängig vom Staat außerhalb der Funktion, sodass sie nicht auf den globalen Zustand oder Variablen außerhalb von sich selbst abhängen sollten. Im ersten Beispiel verwenden wir die außerhalb der Funktion erstellte number -Rearable und setzen sie in der Funktion ein. Dies verstößt gegen dieses Prinzip. Wenn Sie sich stark auf die Änderung globaler Variablen verlassen, ist Ihr Code unvorhersehbar und schwer zu verfolgen. Es wird schwieriger herauszufinden, wo der Fehler aufgetreten ist und warum sich der Wert ändert. Stattdessen ist das Debuggen einfacher mit Eingangs-, Ausgabe- und Funktionsvariablen.

Zusätzlich sollten Funktionen Referenztransparenz folgen, was bedeutet, dass ihre Ausgabe bei der Angabe eines Eingangs immer gleich ist. Wenn ich in der obigen Beispielfunktion 2 an die Funktion übergehe, wird immer 4 zurückgegeben. Dies ist bei API -Aufrufen oder der Generierung von Zufallszahlen nicht der Fall, dies sind nur zwei Beispiele. Bei der gleichen Eingabe kann der Ausgang zurückgegeben werden oder nicht.

// 纯函数
function squareNumber(number) {
  return number * number;
}

squareNumber(2);
Nach dem Login kopieren
Nach dem Login kopieren

Invarianz

funktionale Programmierung priorisiert auch Invariability , dh keine Daten werden direkt geändert. Die Invarianz bringt Vorhersehbarkeit mit sich - Sie kennen den Wert der Daten und sie werden sich nicht ändern. Es macht den Code einfach, prüfbar und läuft auf verteilten und multitHhread -Systemen.

Invarianz spielt häufig eine Rolle, wenn wir mit Datenstrukturen arbeiten. Viele Array -Methoden in JavaScript ändern Arrays direkt. Zum Beispiel löscht .pop() ein Element direkt vom Ende des Arrays, während Sie mit .splice() einen Teil des Arrays erhalten. Stattdessen kopieren wir im funktionalen Paradigma das Array und löschen die Elemente, die wir dabei beseitigen möchten.

// 不具有引用透明性
Math.random();
// 0.1406399143589343
Math.random();
// 0.26768924082159495
Nach dem Login kopieren
// 我们直接修改 myArr
const myArr = [1, 2, 3];
myArr.pop();
// [1, 2]
Nach dem Login kopieren

erstklassige Funktion

In der funktionalen Programmierung sind unsere Funktionen erstklassige Funktionen, was bedeutet, dass wir sie wie jeder andere Wert verwenden können. Wir können Funktionen von Funktionen erstellen, sie als Argumente an andere Funktionen weitergeben und in Variablen speichern.

// 我们复制数组而不包含最后一个元素,并将其存储到变量中
let myArr = [1, 2, 3];
let myNewArr = myArr.slice(0, 2);
// [1, 2]
console.log(myArr);
Nach dem Login kopieren

Fortgeschrittene Auftragsfunktionen

Eine Funktion höherer Ordnung sind Funktionen, die eine von zwei Operationen ausführen: Sie nehmen die Funktion entweder als eine oder mehrere seiner Parameter an oder geben die Funktion zurück. JavaScript hat viele erstklassige Funktionen höherer Ordnung integriert-wie map, reduce und filter können wir sie verwenden, um mit Arrays zu interagieren.

filter wird verwendet, um ein Neues Array aus dem alten Array zurückzugeben, das nur Werte enthält, die den von uns angegebenen Bedingungen erfüllen.

let myFunctionArr = [() => 1 + 2, () => console.log("hi"), x => 3 * x];
myFunctionArr[2](2); // 6

const myFunction = anotherFunction => anotherFunction(20);
const secondFunction = x => x * 10;
myFunction(secondFunction); // 200
Nach dem Login kopieren

map wird verwendet, um Elemente im Array zu iterieren und jedes Element gemäß der angegebenen Logik zu ändern. Im folgenden Beispiel verdoppeln wir jedes Element im Array, indem wir eine Funktion übergeben, die unseren Wert mit 2 mit map multipliziert.

const myArr = [1, 2, 3, 4, 5];

const evens = myArr.filter(x => x % 2 === 0); // [2, 4]
Nach dem Login kopieren

reduce ermöglicht es uns, einen einzelnen Wert basierend auf dem Eingangsarray auszugeben - es wird normalerweise verwendet, um Arrays zu summieren, Arrays oder Gruppenwerte in irgendeiner Weise zu verflachen.

const myArr = [1, 2, 3, 4, 5];

const doubled = myArr.map(i => i * 2); // [2, 4, 6, 8, 10]
Nach dem Login kopieren

Sie können diese Funktionen auch selbst implementieren! Zum Beispiel können Sie eine filter -Funktion wie folgt erstellen:

const myArr = [1, 2, 3, 4, 5];

const sum = myArr.reduce((i, runningSum) => i + runningSum); // 15
Nach dem Login kopieren

Die zweite Art von Funktionen höherer Ordnung (Funktionen, die andere Funktionen zurückgeben) ist ebenfalls ein relativ häufiges Muster. Zum Beispiel:

let number = 2;

function squareNumber() {
  number = number * number; // 非纯操作:操作函数外部的变量
  console.log(number); // 非纯操作:控制台记录值
  return number;
}

squareNumber();
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Möglicherweise interessieren Sie sich auch für Curry, also können Sie es lesen!

Funktionskombination

Funktionskombination besteht darin, mehrere einfache Funktionen zu kombinieren, um komplexere Funktionen zu erstellen. Sie können also eine averageArray -Funktion haben, die die durchschnittliche Funktion mit der Summenfunktion kombiniert, die die Werte des Arrays zusammenfasst. Die einzelnen Funktionen sind klein und können für andere Zwecke wiederholt und zusammen kombiniert werden, um vollständigere Arbeiten auszuführen.

// 纯函数
function squareNumber(number) {
  return number * number;
}

squareNumber(2);
Nach dem Login kopieren
Nach dem Login kopieren

Vorteile

Die funktionale Programmierung generiert einen modularen Code. Sie haben eine kleine Anzahl von Funktionen, die Sie wiederholt verwenden können. Das Verständnis der spezifischen Funktionen jeder Funktion bedeutet, dass es einfach sein sollte, Fehler zu bestimmen und Tests zu schreiben, insbesondere wenn die Funktionsausgabe vorhersehbar sein sollte.

Wenn Sie versuchen, mehrere Kerne zu verwenden, können Sie Funktionsaufrufe an diese Kerne verteilen, damit die Recheneffizienz verbessern kann.

Wie verwendet ich die funktionale Programmierung?

Sie müssen sich nicht vollständig der funktionalen Programmierung wenden, um all diese Ideen zu integrieren. Sie können sogar viele Ideen gut mit objektorientierter Programmierung verwenden, die oft als ihren Rivalen angesehen werden.

zum Beispiel enthält React viele funktionelle Prinzipien, wie z. B. unveränderliche Zustände, aber hauptsächlich seit vielen Jahren die Klassensyntax verwendet. Es kann auch in fast jeder Programmiersprache implementiert werden - Sie müssen keine Clojure oder Haskell schreiben, es sei denn, Sie möchten es wirklich.

Auch wenn Sie kein puristischer Fall sind, können funktionelle Programmierprinzipien in Ihrem Code positive Ergebnisse erzielen.

häufig gestellte Fragen zur funktionalen Programmierung

Was sind die Schlüsselprinzipien der funktionalen Programmierung?

Die funktionale Programmierung basiert auf einigen Schlüsselprinzipien. Erstens ist Invarianz, was bedeutet, dass eine Variable festgelegt wird, die nicht geändert werden kann. Dies beseitigt Nebenwirkungen und erleichtert den Code leichter zu verstehen. Das zweite Prinzip sind reine Funktionen, was bedeutet, dass die Ausgabe einer Funktion nur durch ihre Eingabe ohne versteckte Eingabe oder Ausgabe bestimmt wird. Das dritte Prinzip sind erstklassige Funktionen, was bedeutet, dass Funktionen als Eingabe oder Ausgabe für andere Funktionen verwendet werden können. Dies ermöglicht Funktionen höherer Ordnung und macht den Code prägnanter und einfacher zu verstehen.

Was ist der Unterschied zwischen funktionaler Programmierung und prozeduraler Programmierung?

Der Hauptunterschied zwischen funktionaler und prozeduraler Programmierung ist die Art und Weise, wie sie Daten und Zustand verarbeiten. Bei der prozeduralen Programmierung werden Programmzustände in Variablen gespeichert und können im Laufe der Zeit geändert werden. In der funktionalen Programmierung ändert sich der Staat nicht, erstellt sondern einen neuen Staat aus dem bestehenden Staat. Dies erleichtert eine funktionelle Programmierung, die es einfacher zu vorherrschen und zu debuggen, da sich keine Nebenwirkungen Sorgen machen müssen.

Was sind die Vorteile der funktionalen Programmierung?

funktionale Programmierung bietet viele Vorteile. Dies kann den Code leichter zu lesen und zu verstehen, da er Nebenwirkungen und veränderliche Zustände vermeidet. Es macht den Code auch zuverlässiger, da er die Verwendung reiner Funktionen fördert, die immer denselben Ausgang für dieselbe Eingabe erzeugen. Darüber hinaus kann die funktionelle Programmierung den Code erleichtern, das zu testen und zu debuggen, da Funktionen isoliert getestet werden können.

Was sind die Herausforderungen der funktionalen Programmierung?

Während die funktionale Programmierung viele Vorteile hat, hat sie auch einige Herausforderungen. Es kann schwierig sein zu lernen, insbesondere für Menschen, die an prozedurale oder objektorientierte Programmierung gewöhnt sind. Die Implementierung bestimmter Algorithmen im funktionalen Stil kann ebenfalls schwieriger sein. Darüber hinaus führt die funktionelle Programmierung manchmal zu einem weniger effizienten Code, da häufig neue Objekte erstellt werden, anstatt vorhandene Objekte zu ändern.

Welche Sprachen unterstützen die funktionale Programmierung?

Viele Programmiersprachen unterstützen die funktionale Programmierung in gewissem Maße. Einige Sprachen wie Haskell und Erlang sind rein funktional, während andere, wie JavaScript und Python, Multi-Paradigm-Sprachen sind, die funktionale Programmierungen und andere Paradigmen unterstützen. Sogar Sprachen, die traditionell nicht mit funktionaler Programmierung zu tun haben, wie Java und C, haben die Funktionalität hinzugefügt, um die funktionale Programmierung in den letzten Jahren zu unterstützen.

Wie kann man mit Nebenwirkungen in der funktionalen Programmierung umgehen?

Vermeiden Sie bei funktionaler Programmierung Nebenwirkungen so weit wie möglich. Dies erfolgt durch die Verwendung reine Funktionen, die keinen Zustand ändern oder E/A -Operationen ausführen. Wenn Nebenwirkungen benötigt werden, sind sie isoliert und kontrolliert. In Haskell werden beispielsweise Nebenwirkungen mit Monaden behandelt, die Nebenwirkungen einschließen und eine Möglichkeit bieten, sie auf kontrollierte Weise miteinander zu verbinden.

Was sind die Funktionen höherer Ordnung in der funktionalen Programmierung?

Eine Funktion höherer Ordnung ist eine Funktion, die eine oder mehrere Funktionen als Parameter nimmt, eine Funktion als Ergebnis zurückgibt oder beide Vorgänge gleichzeitig ausführt. Funktionen für Fortgeschrittene sind eine wichtige Funktion der funktionalen Programmierung, da Funktionen als Daten verwendet werden können. Dies kann zu sauberem und ausdrucksstärkerem Code führen.

Was ist Rekursion in der funktionalen Programmierung?

Rekursion ist eine Technik, bei der sich eine Funktion in ihrer eigenen Definition aufruft. Bei der funktionellen Programmierung wird Rekursion häufig als Ersatz für Schleifen verwendet, da Schleifen mutable Zustände beinhalten, die bei der funktionellen Programmierung vermieden werden. Rekursion kann verwendet werden, um eine Vielzahl von Problemen zu lösen, von der Berechnung von Faktorien bis zum Durchqueren von Bäumen.

Was ist Currying in der funktionalen Programmierung?

Currying ist eine Technik in der funktionalen Programmierung, bei der eine Funktion mit mehreren Parametern in eine Reihe von Funktionen konvertiert wird. Jede Funktion hat nur einen Parameter. Auf diese Weise kann ein Teil der Funktion angewendet werden, wobei eine Funktion für einige seiner Parameter gilt und eine neue Funktion zurückgibt, die den Rest der Parameter übernimmt.

Was ist eine funktionelle reaktive Programmierung?

funktionelle reaktive Programmierung (FRP) ist ein Programmierparadigma, das funktionelle und reaktive Programmierung kombiniert. In FRP werden Programmzustände als eine Reihe unveränderlicher Werte modelliert, die im Laufe der Zeit variieren, und Funktionen werden verwendet, um diese Werte zu transformieren und zu kombinieren. Dies erleichtert es, über asynchrone und ereignisgesteuerte Programme zu argumentieren, da es veränderliche Zustände und Nebenwirkungen vermeidet.

Das obige ist der detaillierte Inhalt vonWas ist funktionale Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage