A javascript - devschacht - közepes funkciótípusok aláírása

Ezek a típusú rekordok olyan fémnevek, amelyek a Signatures típusnak felelnek meg, amelyek sokat tudnak a tiszta funkcióról, és sokkal fontosabbak a funkcionális programozásban, mint amennyit elvárnának.

Lássuk, milyen típusú aláírások vannak, és miért kell használnunk őket kódunkban.

A típus-aláírás határozza meg a függvény bemeneti és visszatérési típusát, néha az argumentumok számát, az argumentumok típusát és a függvényben található argumentumok sorrendjét.

A típus-aláírások nagyon pontos utasítások a tiszta funkciók tetején, és a munkájuk nyomon követésére használják őket.

A tipus aláírások a Hindley-Milner típusú rendszeren alapulnak, mint az ML nyelvek standard típusú rendszere. köztük Haskell is.

Ha megtalálja a tiszta funkciót, amelyet típus-aláírással dokumentál, akkor az a képesség, hogy megértsük őket, vizuálisan ábrázolja a funkció működését.

Egyszerű funkciók

A fenti funkció egy stringet vesz és számot ad vissza. Ha alaposan megnézzük, látni fogjuk:

  1. Először írja be a függvény nevét, majd.
  2. A bejövő típus a nyíl előtt van írva.
  3. A visszaküldött típus a nyíllal vagy a végén található.

Ne felejtsük el, hogy csak a bejövő és a visszaadott típusok vannak megírva, így a kijelentés így olvasható: "A hosszúság függvény karaktertől a számig".

A fenti hossz funkció a következőképpen is írható:

És normális, hogy a funkciónak több aláírása is van, ameddig kényelmes. Ha a függvény túlságosan rugalmas lesz a paraméterei miatt, akkor tetszőleges Hindley-Milner változókat kell használnunk - az alábbiakban tárgyaljuk.

Több paraméter

Magasabb rendű funkciók

Ez nem funkcionális programozás, ha nincs olyan függvényünk, amely működőképes

Ha egy függvény paraméterként átadásra kerül, akkor zárójelbe zárjuk, hogy érthetőbb típusú aláírás jöjjön létre.

A fenti függvény a "térkép" függvénye, és nem csak meghatározott adatfajtákkal működik: bármely típusú tömbhöz használható. Ezért ilyen funkciók leírásához valami másra van szükségünk.

Kedves Hindley-Milner változók

Az identitás, a térkép, a szűrő és a redukciók olyan függvényeket fogadnak el, amelyek túlságosan rugalmasak ahhoz, hogy meghatározott típusúak legyenek, ezért a klasszikus Hindley-Milnera változókat

Mivel az azonosító mindig ugyanazt a visszatérési típust adja meg ugyanarra a bejövő típusra, egy → a-t használtunk annak aláírására.

Hosszúságunk is így írható:

Thunks vagy ívelt funkciók

A legtisztább tiszta funkciók típusainak aláírása

Az olyan funkciók esetében, amelyek több érvet is tartalmaznak, mindig jó ötlet a futásukra, később a kódjuk összetételére. Ezenkívül nem ajánlott tetszőleges Hindley-Milner változók használatát, amelyek több érvet tartalmaznak.

A funkciók részleges alkalmazása - devSchacht - Közepes
"A funkciók részleges alkalmazását" Roman Ponomarev publikálja a devSchacht medium.com-ban

A szokásos térképfunkció a fent megadott típus-aláírással rendelkezik. De olyan térképet is találhat egy ilyen aláírással, mint például:

Néha tudjuk, hogy a térkép által visszaadott tömb típusa. mint ebben az esetben.

Nézzük meg a szabványos szűrőt, és csökkentsük

Nyilvánvaló, hogy a csökkentési funkciótípusok aláírása kissé bonyolult. De ha megértjük, hogyan kell aláírni a csökkentési funkció típusát. szinte minden funkcióhoz írható aláírás.

Tehát az első csökkentési argumentum egy csökkentési függvény. fogadó b és a. visszatérni b. Ez azt jelenti, hogy a funkció mindent csökkenteni fog a b típusnál. így a redukcióból () és a megadott kezdeti értékből (init) kapott végső érték b-típusú érték lesz. És mivel az a típusú listából minden egyes érték átveszi ezt a csökkentési függvényt, a dekódolási függvény második argumentuma a típusúnak kell lennie. Ezért egy ilyen típusú aláírás csökkentése () indokolt.

Önkényes tételek

A típus-aláírások másik hozzárendelése önkényes tételek létrehozása. Ezek a tételek nagyon hasznosak, amikor tiszta funkciók kompozícióival foglalkozunk. Mert segítenek nekünk kódunk optimalizálásában és refaktorálásában.

Ez az első önkényes tételünk, amelyet kizárólag a fej- és térképfunkciók aláírásából kaptunk. amely azt mondja, hogy ha az egyes elemekre fn függvényt ábrázoljuk, majd az eredményül kapott tömb fejét vesszük, akkor ez egyenértékű a tömb fején lévő fn függvény alkalmazásával.

Bizonyítsuk be ezt a tételt:

Mivel általában mindkét függvény típusának aláírása megegyezik, megállapíthatjuk, hogy mindkét kompozíció ugyanazt az eredményt adja vissza ugyanarra a bemeneti adatokra.

A fenti deriválás egyszerűbb, mivel lambda számítások szükségesek az önkényes tételek jelenlegi származtatásához, amelynek magyarázata nem e cikk célja.

Mindig átgondolhatod Wadler tudományos munkáját tetszőleges tételeket illetően. ha mélyebbre akarsz menni.

Kérjük, vegye figyelembe, hogy a funkció kompatibilis. itt használt, valójában ellentétes az idiomatikus kompozícióval. További információ itt.

Köszönjük, hogy elolvasta 💖