Funktionaalinen ohjelmointi JavaScript:ssä Osa 2 - Yhdistimet
Pawel Ged
Vue.js Kehittäjä
Tämä on toinen osa artikkelisarjastamme, joka on omistettu funktionaalisen ohjelmoinnin teholle JavaScript:ssä. Tutustu tähän artikkeliin laajentaaksesi tietämystäsi kombinaattoreista.
Johdanto yhdistelmiin
Kombinaattorit ovat korkeamman tason funktioita, joiden avulla voit yhdistää funktioita, muuttujia tai muita kombinaattoreita. Yleensä ne eivät sisällä omien muuttujiensa tai liiketoimintalogiikan julistuksia. Ne ovat ainoat, jotka huuhtelevat ohjausta funktio-ohjelmassa.
Tässä artikkelissa yritän käsitellä muutamia niistä:
Napauta
Currying
Putki/sommittele
Haarukka
Vuorottelu
Jakso
Napauta
Kombinaattori on erittäin hyödyllinen funktioissa, jotka eivät palauta mitään. Se ottaa funktion, johon parametri menee, ja sitten se palautetaan.
const [items, setItems] = useState(() => [])
axios
.get('http://localhost')
.then({ data } => {
setItems(data)
console.log(data)
onLoadData(data)
}).then(....) // palaa määrittelemättömänä - lupauksen tietoja on muutettu.
Deklaratiivinen esimerkki
const [items, setItems] = useState(() => [])
axios
.get('http://localhost')
.then(({ data }) => data)
.then(tap(setItems)) // (data) => { setItems(data); return data }
.then(tap(console.log)) // yksi then = yksi funktio = yksi vastuu
.then(tap(onLoadData))
.then(....) // edelleen pääsy alkuperäisiin tietoihin.
// helppo ylläpitää open/close-periaatetta
Currying
Se jakaa funktion argumentit ja mahdollistaa niiden kutsumisen peräkkäin.
const sum = (a, b, c) => a + b + c
const currySum = curry(sum)
/*
mahdolliset kutsut
currySum(a)(b)(c),
currySum(a)(b,c),
currySum(a,b)(c),
currySum(a,b,c)
*/
currySum(1) // (b, c) => 1 + a + b tai (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) // palauttaa 5.
const multiplyByFive = multiplyBy(5)
multiplyByFive(10) // palauttaa 50 %.
Putki/sommittele
Komposition avulla on mahdollista siirtää tietoja funktiosta toiseen. On tärkeää, että funktiot ottavat saman määrän argumentteja. Piipun ja koosteen ero on siinä, että ensin mainittu suorittaa funktiot ensimmäisestä viimeiseen, ja kooste kutsuu niitä lopusta alkaen.