window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Funktionale Programmierung in JavaScript Teil 2 - Kombinatoren - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2022-06-07
Software-Entwicklung

Funktionale Programmierung in JavaScript Teil 2 - Kombinatoren

Der Codest

Pawel Ged

Vue.js Entwickler

Dies ist der zweite Teil unserer Artikelserie, die sich mit den Möglichkeiten der funktionalen Programmierung in JavaScript beschäftigt. Lesen Sie diesen Artikel, um Ihr Wissen über Kombinatoren zu erweitern.

Einführung in die Kombinatoren

Kombinatoren sind Funktionen auf höherer Ebene, mit denen Sie Funktionen, Variablen oder andere Kombinatoren kombinieren können. Normalerweise enthalten sie keine Deklarationen ihrer eigenen Variablen oder Geschäftslogik. Sie sind die einzigen, die die Steuerung in einem Funktionsprogramm spülen.

In diesem Artikel werde ich versuchen, einige von ihnen zu behandeln:

  • Tippen Sie auf .
  • Currying
  • Pfeifen/Komponieren
  • Gabel
  • Abwechslung
  • Sequenz

Tippen Sie auf .

Ein Kombinator ist sehr nützlich für Funktionen, die nichts zurückgeben. Er nimmt die Funktion, an die der Parameter geht, und gibt sie dann zurück.

Erklärung

const tap = (fn) => (Wert) => {
fn(Wert);
return value;
};

Imperatives Beispiel

const [items, setItems] = useState(() => [])

axios
.get('http://localhost')
.then({ Daten } => {
setItems(daten)
console.log(daten)
onLoadData(daten)
}).then(...) // gibt undefiniert zurück - die Daten im Versprechen wurden geändert

Deklaratives Beispiel

const [items, setItems] = useState(() => [])

axios
.get('http://localhost')
.then(({ Daten }) => Daten)
.then(tap(setItems)) // (data) => { setItems(data); return data }
.then(tap(console.log)) // eine dann = eine Funktion = eine Verantwortung
.then(tap(onLoadData))
.then(...) // weiterhin Zugriff auf Originaldaten
// einfaches Öffnen/Schließen-Prinzip beibehalten

Currying

Sie teilt die Argumente einer Funktion auf und ermöglicht es, sie nacheinander aufzurufen.

Erklärung

const curry = (fn) => {
const curried = (...args) => {
if (fn.length !== args.length){
return curried.bind(null, ...args)
}
return fn(...args);
};

return curried

};


Beispiel

const curry = (fn) => {
const curried = (...args) => {
if (fn.length !== args.length){
return curried.bind(null, ...args)
}
return fn(...args);
};

return curried

};
const sum = (a, b, c) => a + b + c

const currySum = curry(sum)
/*
mögliche Aufrufe
currySum(a)(b)(c),
currySum(a)(b,c),
currySum(a,b)(c),
currySum(a,b,c)
*/

currySum(1) // (b, c) => 1 + a + b oder (b) => (c) => 1 + a + b
currySum(5)(10) // (c) => 5 + 10 + b
currySum(5, 10) // (c) => 5 + 10 + b
currySum(5)(10)(20) // 35
currySumme(5, 10)(20) // 35
currySumme(5)(10, 20) // 35

const divideBy = curry((a, b) => b / a)
const multiplyBy = curry((a, b) => a * b)

const divideByTwo = divideBy(2)
divideByTwo(10) // ergibt 5

const multiplyByFive = multiplyBy(5)
multiplyByFive(10) // ergibt 50

Pfeifen/Komponieren

Durch Komposition ist es möglich, Daten von einer Funktion an eine andere zu übergeben. Dabei ist es wichtig, dass die Funktionen die gleiche Anzahl von Argumenten annehmen. Der Unterschied zwischen pipe und compose besteht darin, dass erstere die Funktion vom Anfang bis zum Ende ausführt, während compose sie vom Ende her aufruft.

Erklärung

const pipe = (...fns) => (Wert, ...args) =>
fns.reduce((v, f, i) =>
i === 0
? f(v, ...args)
: f(v),
value);

const compose = (...fns) => (value, ...args) =>
fns.reduceRight((v, f, i) =>
i === (fns.length - 1)
? f(v, ...args)
: f(v),
value);
const pipe = (...fns) => (Wert, ...args) =>
fns.reduce((v, f, i) =>
i === 0
? f(v, ...args)
: f(v),
value);

const compose = (...fns) => (value, ...args) =>
fns.reduceRight((v, f, i) =>
i === (fns.length - 1)
? f(v, ...args)
: f(v),
value);

Imperatives Beispiel

const sine = (val) => Math.sin(val * Math.PI / 180) // nicht lesbar
 sine(90) // liefert 1

Deklaratives Beispiel

const sine = pipe(
multiplyBy(Math.PI) // ↓ val * Math.PI
divideBy(180), // ↓ val * Math.PI / 180
Math.sin, // ↓ Math.sin(val * Math.PI / 180)
)

const sine = compose(
Math.sin, // ↑ Math.sin(val * Math.PI / 180)
divideBy(180), // ↑ val * Math.PI / 180
multiplyBy(Math.PI) // ↑ val * Math.PI
)

Sinus(90) // ergibt 1

Gabel

Der Fork Combiner ist in Situationen nützlich, in denen Sie einen Wert auf zwei Arten verarbeiten und das Ergebnis kombinieren möchten.

Erklärung

const fork = (join, fn1, fn2) => (Wert) => join(fn1(Wert), fn2(Wert));

Beispiel

const length = (array) => array.length
const sum = (array) => array.reduce((a, b) => a + b, 0)
const divide = (a, b) => a / b

const arithmeticAverage = fork(divide, sum, length)

arithmetischerDurchschnitt([5, 3, 2, 8, 4, 2]) // ergibt 4

Abwechslung

Dieser Kombinator nimmt zwei Funktionen und gibt das Ergebnis der ersten zurück, wenn es wahr ist. Andernfalls gibt er das Ergebnis der zweiten Funktion zurück.

Erklärung

const alt = (fn, orFn) => (Wert) => fn(Wert) || orFn(Wert)

Beispiel

const users = [{
uuid: '123e4567-e89b-12d3-a456-426655440000',
name: 'William'
}]

const findUser = ({ uuid: searchesUuid }) =>
users.find(({ uuid }) => uuid === searchesUuid)

const newUser = data => ({ ...data, uuid: uuid() // neue uuid erstellen })

const findOrCreate = alt(findUser, newUser)

findOrCreate({ uuid: '123e4567-e89b-12d3-a456-426655440000' }) // liefert William-Objekt
findOrCreate({ name: 'John' }) // gibt John-Objekt mit neuer uuid zurück

Sequenz

Es akzeptiert viele unabhängige Funktionen und übergibt an jede von ihnen denselben Parameter. In der Regel geben diese Funktionen keinen Wert zurück.

Erklärung

const seq = (...fns) => (val) => fns.forEach(fn => fn(val))

Beispiel

const appendUser = (id) => ({ Name }) => {
document.getElementById(id).innerHTML = name
}

const printUserContact = pipe(
findOrCreate, // gibt Benutzer zurück
seq(
appendUser('#contact'), // Benutzer => ungültig
console.log, // Benutzer => ungültig
onContactUpdate // benutzer => void
)
)

printUserContact(userData)
Kooperationsbanner

Ähnliche Artikel

Software-Entwicklung

Zukunftssichere Web-Apps bauen: Einblicke vom The Codest-Expertenteam

Entdecken Sie, wie sich The Codest bei der Erstellung skalierbarer, interaktiver Webanwendungen mit Spitzentechnologien auszeichnet, die nahtlose Benutzererfahrungen auf allen Plattformen bieten. Erfahren Sie, wie unsere Expertise die digitale Transformation und...

DAS SCHÖNSTE
Software-Entwicklung

Top 10 Softwareentwicklungsunternehmen in Lettland

Erfahren Sie in unserem neuesten Artikel mehr über die besten Softwareentwicklungsunternehmen Lettlands und ihre innovativen Lösungen. Entdecken Sie, wie diese Technologieführer Ihr Unternehmen voranbringen können.

thecodest
Enterprise & Scaleups Lösungen

Grundlagen der Java-Softwareentwicklung: Ein Leitfaden für erfolgreiches Outsourcing

Entdecken Sie diesen wichtigen Leitfaden zum erfolgreichen Outsourcing der Java-Softwareentwicklung, um die Effizienz zu steigern, auf Fachwissen zuzugreifen und den Projekterfolg mit The Codest voranzutreiben.

thecodest
Software-Entwicklung

Der ultimative Leitfaden für Outsourcing in Polen

Der Anstieg des Outsourcings in Polen wird durch wirtschaftliche, bildungspolitische und technologische Fortschritte angetrieben, die das IT-Wachstum und ein unternehmensfreundliches Klima fördern.

TheCodest
Enterprise & Scaleups Lösungen

Der vollständige Leitfaden für IT-Audit-Tools und -Techniken

IT-Audits gewährleisten sichere, effiziente und gesetzeskonforme Systeme. Erfahren Sie mehr über ihre Bedeutung, indem Sie den vollständigen Artikel lesen.

Der Codest
Jakub Jakubowicz CTO & Mitbegründer

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

    de_DEGerman
    en_USEnglish sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek de_DEGerman