Javascript-Tools in Aktion
Entdecken Sie einige JavaScript-Tools, um Ihr Programmierspiel zu verbessern. Erfahren Sie mehr über ESLint, Prettier und Husky!
Lesen Sie unseren Artikel, um die Leistungsfähigkeit der funktionalen Programmierung in JavaScript zu entdecken. Funktionale Programmierung wird als deklaratives Paradigma eingestuft, bei dem die Programmbeschreibung von den Berechnungen getrennt ist.
"Einfach ausgedrückt, ist die funktionale Programmierung eine Software-Entwicklung Stil, der den Schwerpunkt auf die Verwendung von Funktionen legt"
Auszüge aus dem Buch: Luis Atencio "Funktionale Programmierung in JavaScript. So verbessern Sie Ihre JavaScript Programme mit funktionalen Techniken"
Funktionale Programmierung wird eingestuft als deklarativ Paradigma, bei dem die Programmbeschreibung von den Berechnungen getrennt ist. Der Schwerpunkt liegt hier auf der Verwendung von Ausdrücken zur Beschreibung der Programmlogik. Dies ist das Gegenteil von Imperativ Programmierung, bei der die Code wird Schritt für Schritt ausgeführt und sagt dem Computer im Detail, wie er die Aufgabe erledigen soll.
Nehmen wir den Fall an, dass wir eine Reihe von ganzen Zahlen haben und jede von ihnen auf die zweite Potenz erhöhen müssen und dann nur die Werte auswählen, die nicht gerade sind.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const results = []
for(let i = 0; i < numbers.length; i++) {
const zweitePotenz = Math.pow(Zahlen[i], 2)
if(secondPower & 1) { // oder % 2, aber Operationen mit Bits sind schneller
results.push(secondPower);
}
}
console.log(ergebnisse) // [1, 9, 25, 49, 81]
Was die Imperativ Lösung ist die Konzentration auf Implementierungsdetails deutlich sichtbar. In der Schleife können Sie den Array-Index sehen, der auf der Notwendigkeit basiert, die Anzahl der Elemente zu kontrollieren. Aufgrund der großen Anzahl von Details im Code ist es schwieriger, sich auf das zu konzentrieren, was er tut. Konzentrieren wir uns nun auf die deklarativ Lösung.
const risesToSecondPower = (Ziffern) => Math.pow(Ziffern, 2)
const isOdd = (num) => num & 1;
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
const results = numbers
.map(steigtZurSekundenPotenz)
.filter(isOdd);
console.log(results) // [1, 9, 25, 49, 81]
Bei dieser Lösung wurde die Implementierung vom Aufruf getrennt, indem die Logik in separate Funktionen ausgelagert wurde. Dank dieser Lösung können wir uns nur auf die Namen der Funktionen konzentrieren, die beschreiben, was in ihnen geschieht. Außerdem wurde die Abstraktionsebene angehoben, und die Logik kann nun wiederverwendet werden. Konzentrieren wir uns nun auf den Aufruf. Sie sehen darin keine Details, sondern nur eine Beschreibung, die Ihnen Schritt für Schritt erklärt, was dieser Code tut:
map(risesToSecondPower)
- nimmt jedes Element eines Arrays und hebt es auf die zweite Potenz,filter(isOdd)
- filtern und ungerade Elemente auswählen.Funktionale Programmierung hat viele Vorteile. Wenn es darum geht JavaScriptDie Verwendung von Funktionen ist natürlich, da es sich um eine funktionale Sprache handelt. Selbst die Klassen in dieser Sprache sind "syntaktischer Zucker" und bestehen aus Funktionen.
Wenn es um die Lesbarkeit geht, wird der Code beim imperativen Ansatz in der Regel zu einer Liste mit Namen von Funktionen, die nacheinander gelesen werden können, ohne sich mit ihrer Logik zu befassen. Infolgedessen konzentrieren wir uns nicht auf die Details der Implementierung.
Ein weiterer Vorteil ist das Festhalten an der Konvention der unveränderlichen Objekte. Dank dieses Ansatzes wird der Code sicherer, da die Referenzen in JavaScript sind sehr stark und es ist einfach, das unerwünschte Objekt zu verändern.
Bei der funktionalen Programmierung wird der Code in kleine Funktionen aufgeteilt, die man sich leicht als wiederverwendbaren abstrakten Code vorstellen kann.
Einer der wichtigsten Aspekte der funktionalen Programmierung sind reine Funktionen. Um eine solche Funktion zu erstellen, müssen Sie ein paar Regeln beachten:
// Funktion einleiten
let zähler = 5
...
const multipleCounter = (Multiplikator) => {
Zähler = Zähler * Multiplikator
}
multiplyCounter(2) // -> ? das Ergebnis hängt vom Ausgangswert ab
// Reine Funktion
const multiplyBy = (Multiplikator) => (Wert) => Wert * Multiplikator
const multipleByTwo = multiplyBy(2)
const counter = multiplyByTwo(5) // -> 10
Die erste Funktion ist unvorhersehbar, weil sie von einem externen Parameter abhängt, der sich ändern kann. Die zweite Funktion ist transparent, da sie nur von Eingabeparametern abhängt, diese nicht verändert und keine Variablen verwendet, die außerhalb des Bereichs liegen. Sie ist transparent, weil sie von Parametern abhängt, diese nicht verändert, keine Variablen außerhalb des Bereichs verwendet und einen neuen Wert zurückgibt.