Funktsioonide koostis JavaScripti

Funktsioonide koostis on ühe funktsiooni punktirakendus teise tulemuse suhtes. Arendajad teevad seda iga päev käsitsi, kui pesa töötab:

compose = (fn1, fn2) => value => fn2(fn1(value))

Kuid seda on raske lugeda. Funktsioonide koostist on parem kasutada. Selle asemel, et lugeda neid seestpoolt:

add2AndSquare = (n) => square(add2(n))

Nende järjestatud aheldamiseks saame kasutada kõrgema järgu funktsiooni.

add2AndSquare = compose( add2, square)

Koostamise lihtne rakendamine oleks:

compose = (f1, f2) => value => f2( f1(value) );

Veelgi suurema paindlikkuse saamiseks võime kasutada funktsiooni reducRight:

compose = (...fns) => (initialVal) => fns.reduceRight((val, fn) => fn(val), initialVal);

Komposiidi lugemine vasakult paremale võimaldab kõrgema järgu funktsioonide selget aheldamist. Reaalses maailmas on näiteks autentimiste, logimise ja konteksti omaduste lisamine. See on tehnika, mis võimaldab taaskasutamist kõige kõrgemal tasemel. Siin on mõned näited, kuidas seda kasutada:

// example const add2 = (n) => n + 2; const times2 = (n) => n * 2; const times2add2 = compose(add2, times2); const add6 = compose(add2, add2, add2); times2add2(2); // 6 add2tiems2(2); // 8 add6(2); // 8

Võite arvata, et see on täiustatud funktsionaalne programmeerimine ja see pole esipaneeli programmeerimise jaoks asjakohane. Kuid see on kasulik ka ühe lehe rakendustes. Näiteks võite reageerimise komponendile lisada käitumise, kasutades kõrgema järgu komponente:

function logProps(InputComponent) { InputComponent.prototype.componentWillReceiveProps = function(nextProps) { console.log('Current props: ', this.props); console.log('Next props: ', nextProps); }; return InputComponent; } // EnhancedComponent will log whenever props are received const EnhancedComponent = logProps(InputComponent);

Kokkuvõtteks võimaldab funktsiooni koostis funktsionaalsuse korduvkasutatavust väga kõrgel tasemel. Kui funktsioonid on hästi üles ehitatud, võimaldab see arendajatel luua olemasoleva käitumise põhjal uue käitumise.

See suurendab ka rakenduste loetavust. Pesemisfunktsioonide asemel saate funktsioone selgelt aheldada ja luua tähenduslike nimedega kõrgema järgu funktsioone.