The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2022-06-07
Programinės įrangos kūrimas

Funkcinis programavimas JavaScript 2 dalis - Kombinatoriai

The Codest

Pawel Ged

Vue.js kūrėjas

Tai antroji straipsnių serijos, skirtos funkcinio programavimo galiai JavaScript, dalis. Peržiūrėkite šį straipsnį, kad praplėstumėte savo žinias apie kombinatorius.

Įvadas į kombinatorius

Kombinatoriai yra aukštesnio lygio funkcija, leidžianti sujungti funkcijas, kintamuosius ar kitus kombinatorius. Paprastai juose nėra savo kintamųjų ar verslo logikos deklaracijų. Jie yra vieninteliai, skirti funkcinės programos valdymui išplauti.

Šiame straipsnyje pabandysiu aptarti keletą iš jų:

  • Bakstelėkite
  • Currying
  • Vamzdis / Kompozicija
  • Šakutės
  • Pakaitinis
  • Sekvencija

Bakstelėkite

Kombinatorius labai naudingas funkcijoms, kurios nieko negrąžina. Jis paima funkciją, į kurią patenka parametras, ir tada jį grąžina.

Deklaracija

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

Imperatyvus pavyzdys

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

axios
.get('http://localhost')
.then({ duomenys } => {
setItems(duomenys)
console.log(data)
onLoadData(data)
}).then(...) // grąžinama neapibrėžta - pažadėjime esantys duomenys buvo pakeisti

Deklaratyvinis pavyzdys

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

axios
.get('http://localhost')
.then(({ duomenys }) => duomenys)
.then(tap(setItems)) // (duomenys) => { setItems(duomenys); return data }
.then(tap(console.log)) // vienas then = viena funkcija = viena atsakomybė
.then(tap(onLoadData))
.then(...) // vis dar prieiga prie pradinių duomenų
// lengva išlaikyti atidarymo/uždarymo principą

Currying

Jis padalina funkcijos argumentus ir leidžia juos iškviesti iš eilės.

Deklaracija

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

return curried

};


Pavyzdys

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)
/*
galimi iškvietimai
currySum(a)(b)(c),
currySum(a)(b,c),
currySum(a,b)(c),
currySum(a,b,c)
*/

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

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

const divideByTwo = divideBy(2)
divideByTwo(10) // grąžina 5

const multiplyByFive = multiplyBy(5)
multiplyByFive(10) // grąžina 50

Vamzdis / Kompozicija

Naudojant kompoziciją galima perduoti duomenis iš vienos funkcijos į kitą. Svarbu, kad funkcijos priimtų tą patį argumentų skaičių. Skirtumas tarp pipe ir compose yra tas, kad pirmoji funkcija vykdo funkcijas nuo pirmos iki paskutinės, o compose jas iškviečia nuo galo.

Deklaracija

const pipe = (...fns) => (value, ...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) => (value, ...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);

Imperatyvus pavyzdys

const sine = (val) => Math.sin(val * Math.PI / 180) // neperskaitoma
 sine(90) // grąžina 1

Deklaratyvinis pavyzdys

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) // grąžina 1

Šakutės

Šakutės derintuvas naudingas tais atvejais, kai norite apdoroti reikšmę dviem būdais ir sujungti rezultatą.

Deklaracija

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

Pavyzdys

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

const arithmeticAverage = fork(divide, sum, length)

arithmeticAverage([5, 3, 2, 8, 4, 2]) // grąžina 4

Pakaitinis

Šis kombinatorius naudoja dvi funkcijas ir grąžina pirmosios rezultatą, jei jis yra true. Priešingu atveju grąžinamas antrosios funkcijos rezultatas.

Deklaracija

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

Pavyzdys

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

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

const newUser = data => ({ ...data, uuid: uuid() // sukurti naują uuid })

const findOrCreate = alt(findUser, newUser)

findOrCreate({ uuid: '123e4567-e89b-12d3-a456-426655440000' }) // grąžina William objektą
findOrCreate({ name: 'John' }) // grąžina John objektą su nauju uuid

Sekvencija

Ji priima daug nepriklausomų funkcijų ir kiekvienai iš jų perduoda tą patį parametrą. Paprastai šios funkcijos negrąžina jokios vertės.

Deklaracija

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

Pavyzdys

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

const printUserContact = pipe(
findOrCreate, // grąžina naudotoją
seq(
appendUser('#contact'), // user => void
console.log, // user => void
onContactUpdate // user => void
)
)

printUserContact(userData)
bendradarbiavimo vėliava

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

      The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

      Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

      Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian lt_LTLithuanian