Semnarea tipurilor de funcții în javascript - devschacht - mediu

Aceste înregistrări de tip sunt un metaj denumit Tip Signatures, care poate spune multe despre funcția pură și este mult mai important în programarea funcțională decât v-ați aștepta.

Să vedem ce tip de semnături sunt și de ce ar trebui să le folosim în codul nostru.

Semnătura tip definește tipurile de intrare și returnare pentru o funcție, uneori inclusiv numărul de argumente, tipurile de argumente și ordinea argumentelor conținute în funcție.

Semnăturile tip sunt declarații foarte precise scrise pe lângă funcțiile pure și folosite pentru a-și urmări activitatea.

Semnăturile de tip se bazează pe sistemul de tip Hindley-Milner ca sistem de tip standard pentru limbile ML. inclusiv Haskell.

Și dacă găsiți o funcție pură, documentată de semnăturile de tip, abilitatea de a le înțelege vă va da o reprezentare vizuală a funcționării acestei funcții.

Funcții simple

Funcția de mai sus ia un șir și returnează un număr. Dacă ne uităm îndeaproape, vom vedea:

  1. Mai întâi, numele funcției este scris și apoi.
  2. Tipul de intrare este scris înaintea săgeții.
  3. Tipul returnat este scris după săgeată sau chiar la sfârșit.

Amintiți-vă că numai tipurile de intrare și returnare sunt scrise astfel încât instrucțiunea să poată fi citită astfel: "Funcția de lungime de la șir la număr".

Funcția de lungime de mai sus poate fi scrisă și ca:

Și este normal ca funcția să aibă mai multe semnături, atâta timp cât este convenabilă. Dacă funcția devine prea flexibilă datorită tipurilor parametrului său, atunci trebuie să folosim variabilele Hindley-Milner arbitrare - le vom discuta mai jos.

Mai mulți parametri

Funcții de ordin superior

Aceasta nu este o programare funcțională, dacă nu avem funcții care să funcționeze pe funcții

Atunci când o funcție este trecută ca parametru, o închidem în paranteze pentru a oferi o semnătură de tip mai ușor de înțeles.

Funcția de mai sus este o funcție a "hărții" și nu funcționează numai cu anumite tipuri de date: poate funcționa cu orice tip de matrice. Prin urmare, pentru a descrie astfel de funcții, avem nevoie de altceva.

Variabile arbitrare Hindley-Milner

Funcționează ca identitate, hartă, filtrare și recurge la acceptarea unor argumente care sunt prea flexibile pentru a fi definite de un anumit tip, deci folosim variabilele clasice Hindley-Milnera

Deoarece identitatea ne va da întotdeauna același tip de returnare pentru același tip de intrare, am folosit un → a pentru a reprezenta semnătura sa.

De asemenea, funcția noastră de lungime poate fi scrisă astfel:

Mormane sau funcții curbe

Semnături ale tipurilor celor mai pure funcții pure

Pentru funcțiile care iau mai multe argumente, este întotdeauna o idee bună să le corectezi, pentru a le face mai târziu o compoziție în codul nostru. În plus, nu se recomandă utilizarea variabilelor arbitrare Hindley-Milner cu funcții cu mai multe argumente.

Aplicarea parțială a funcțiilor - devSchacht - Mediu
"Aplicarea parțială a funcțiilor" este publicată de Roman Ponomarev în devSchacht medium.com

Funcția de hartă standard va avea semnătura de tip specificată mai sus. Dar puteți găsi și o hartă cu o astfel de semnătură, cum ar fi:

Uneori știm tipul de matrice returnat de hartă. ca în acest caz.

Să ne uităm la filtrul standard și să reducem

În mod evident, semnătura tipurilor funcției de reducere este puțin complicată. Dar dacă putem înțelege cum să scriem o semnătură a tipurilor funcției de reducere. putem scrie o semnătură de tip pentru aproape orice funcție.

Deci, primul argument de reducere este o funcție de decrementare. primind b și a. pentru a reveni b. Aceasta înseamnă că funcția va reduce totul la tipul b. astfel încât valoarea finală obținută de reduce () și valoarea inițială furnizată (init) va avea o valoare de tip b. Și deoarece fiecare valoare individuală dintr-o listă de tip a trece prin această funcție de decrementare, al doilea argument al funcției decrement trebuie să fie de tip a. Prin urmare, o astfel de semnătură de tip reduce () este justificată.

Teoreme arbitrare

O altă atribuire a semnăturilor de tip este de a crea teoreme arbitrare. Aceste teoreme sunt foarte utile atunci când avem de-a face cu compoziții de funcții pure. Pentru că ne ajută în optimizarea și refactorizarea codului nostru.

Aceasta este prima noastră teoremă arbitrară, obținută exclusiv din semnăturile tipurilor funcțiilor capului și ale hărții. care afirmă că dacă hartă funcția fn pe fiecare element și apoi luăm capul matricei rezultate, atunci aceasta va fi echivalentă cu aplicarea funcției fn pe capul matricei.

Să dovedim această teoremă:

Întrucât, în general, semnăturile tipurilor celor două funcții sunt identice, putem concluziona că ambele compoziții returnează același rezultat pentru aceleași date de intrare.

Derivarea de mai sus este simplificată, deoarece calculele lambda sunt necesare pentru derivarea actuală a teorimelor arbitrare, a căror explicație nu este scopul acestui articol.

Puteți trece întotdeauna peste lucrarea științifică a lui Wadler cu privire la teorii arbitrare. dacă vrei să mergi mai adânc.

Rețineți că funcția este compatibilă. folosit aici, este de fapt opusul compoziției idiomatice. Mai multe informații aici.

Vă mulțumim că ați citit 💖