A funkciók összetétele

Beágyazási funkciók

A kompozíció egy olyan technika, amely lehetővé teszi két vagy több egyszerű feladat felvételét, és összekapcsolja azokat egy bonyolultabb funkcióval, amely logikai sorrendben végrehajtja az alfunkciókat bármely adattal.

Ennek az eredménynek az eléréséhez egy függvényt helyez be a másikba, és végrehajtja a külső függvény működését a belső függvény eredményén, amíg az eredményt nem kapja. És az eredmény különbözhet attól függően, hogy milyen sorrendben alkalmazzák a függvényeket.

Ebben a példában az addOne () függvényt állítjuk be. Egy hozzáadás az elfogadott argumentumhoz és az timesTwo () függvényhez. megszorozza az érvelést kétszer. Az egyik függvény eredményének argumentumként való átadása egy másik függvénynek, láthatjuk, hogy az egyik függvény beágyazása teljesen eltérő eredményeket hozhat, még egy értékkel is. Először a belső függvény végrehajtódik, majd az eredmény átmegy a külső függvényre.

Elengedhetetlen összetétel

Ha több műveletet kíván végrehajtani, akkor kényelmesebb lehet egy olyan új funkció megadása, amely automatikusan alkalmazza az elsőt, majd egy másik kisebb funkciót. Ez valami ilyesmi lehet:

Ebben az esetben a két függvényt manuálisan egy bizonyos sorrendben összekapcsoltuk. Új funkciót hoztunk létre, amely először hozzárendeli a birtokosnak átadott értéket. majd frissíti a változó értékét, majd átmásolja mindkét függvényre és visszaadja az eredményt.

Hasonlóképpen, ha egy másik új függvényt akarunk létrehozni, amely két kisebb függvényt hív fel ellentétes sorrendben:

Természetesen a kód meglehetősen monotonnak tűnik. Két új összetett funkciónk majdnem azonosnak tűnik, kivéve a kisebb funkciók hívásának sorrendjét. Nincs elég DRY. Az átmeneti változók használata, amelyek megváltoztatják értékeiket, nem működnek, még akkor sem, ha rejtve vannak a létrehozott összetett függvényekben.

Általában jobbat tudunk tenni.

Funkcionális összetétel létrehozása

Létre kell hoznunk egy olyan összetett függvényt, amely képes a meglévő függvényeket és összeolvasztani őket a szükséges sorrendben. Ehhez következetes módon, nem minden alkalommal játszottunk belső tartalmakkal, úgy döntöttünk, hogy a függvények sorrendjét argumentumként adjuk át.

Két lehetőségünk van. Az argumentumok mindkét esetben függvények lesznek, és bármely sorrendben végrehajthatók. Szükséges meghatározni, mivel az általunk kínált új funkció (timesTwo, addOne) képes időt dolgozni kétszer (addOne ()). az argumentumok olvasása jobbról balra vagy addOne (timesTwo ()), amikor argumentumokat olvas balról jobbra.

A balról jobbra érkező argumentumok végrehajtásának előnye, hogy angolul is olvashatóak és egyszerű szövegek is, ugyanabból az okból hívtuk a függvényünketTwoAddOne () függvénynek. hogy megmutassák, hogy a szaporodás megelőzi a kiegészítést. Mindannyian tudjuk, hogy logikus elnevezésekre van szükség ahhoz, hogy világosan olvasható kódot kapjunk.

Mindenesetre, amit tényleg meg kell tennünk, először át kell adnunk az összes konfigurációs adatot, végül pedig az általunk használt adatokat. Ezért ésszerűbb, hogy összetett funkciónk olvassa el és alkalmazza az argumentumokat jobbról balra.

Így létrehozhatunk egy kezdetleges összetett funkciót. így néz ki:

Egy nagyon egyszerű kompozíciós funkció használatával egyszerűbb módon készíthetünk összetett funkciókat példánkból, és győződhetünk meg arról, hogy az eredmény azonos:

Bár ez az egyszerű összeállítás funkció működik, nem veszi figyelembe számos kérdést, ami korlátozza annak rugalmasságát és alkalmazhatóságát. Például szükségünk lehet egynél több funkciót tartalmazó összetételre. Ezt a funkciót a követés során is elveszítjük.

Meg tudjuk oldani ezeket a problémákat, de nem szükségesek a kompozíció elvének megértéséhez. Ahelyett, hogy saját verziót írana, sokkal produktívebb lehet az egyik könyvtárból származó komponens a funkcionális programozáshoz, mint a Ramda. amelyben a jobbról-balra érkező argumentumok sorrendje alapértelmezés szerint végrehajtásra kerül.

A típusok a te felelősséged

Ön nem csak a számok átvitelére korlátozódik, és nem is korlátozza egyfajta változó mentését egyik funkcióról a másikra való áttéréskor. De meg kell győződnie arról, hogy a kompozícióban szereplő funkciók készen állnak az előző funkció által visszaadott értékek kezelésére.

Vegye figyelembe a közönségét

következtetés

Mint minden funkcionális programozási technikához, fontos figyelembe venni, hogy a kompozíciós funkciók tiszták legyenek. Röviden, ez azt jelenti, hogy egy adott értéknek egy függvényhez való minden egyes átvitelével mindig ugyanazt az eredményt kell visszakapnia, és nem okozhat mellékhatásokat, hanem az értékeket külsőleg is megváltoztatja.

A kompozitálási melléklet nagyon kényelmes lehet, ha olyan kapcsolódó funkciók vannak, amelyeket alkalmazni szeretne az adatokhoz, és megszakíthatja e funkciók összetevőit újrafelhasználható és könnyen csatlakoztatható funkciókba.

A funkcionális programozási technikákhoz hasonlóan a kompozíciót megfontoltan hozzá kell adni a meglévő kódhoz, hogy megismerkedjen vele. Ha ezt helyesen végzi, az eredmény világosabb, tömör és olvasható. Nem ezt akarjuk?

Kapcsolódó cikkek