Hvordan punktfri komposition vil gøre dig til en bedre funktionel programmør

Discover Functional JavaScript blev udnævnt til en af ​​de bedste nye funktionelle programmeringsbøger af BookAuthority !

"Punktfri stil - sigter mod at reducere noget af det visuelle rod ved at fjerne unødvendig parameter-argumentkortlægning." - Kyle Simpson i JavaScript med funktionel lys

Overvej den flydende kode:

let newBooks = books.filter(point => isTechnology(point))

Se nu på den samme kode efter eliminering af punkter (parametre / argumenter):

let newBooks = books.filter(isTechnology)

Punktfri i listeoperationer

Lad os lave listeoperationer i en punktfri stil.

Sig, at vi skal finde teknologititlerne på en liste over bøger, forberede bogobjektet med al information til visningen og sortere bøgerne efter forfatterens navn.

Sådan ser koden ud:

function getBooks(){ return books.filter(isTechnology) .map(toBookView) .sort(ascByAuthor); } //Small functions with points function isTechnology(book){ return book.type === "T"; } function toBookView(book){ return Object.freeze({ title : book.title, author : authors[book.authorID].name }); } function ascByAuthor(book1, book2){ if(book1.author  book2.author) return 1; return 0; }

De tilbagekald isTechnology(), toBookView(), ascByAuthor()er små funktioner med intention-afslørende navne. De er ikke bygget i en punktfri stil.

Koden, der samler alle disse funktioner i, getBooks()er punktfri.

Nedbrydning og sammensætning

Vores naturlige måde at håndtere et problem på er at bryde det i mindre stykker og derefter sætte alt sammen igen.

Vi deler den større opgave op i flere funktioner, der udfører mindre opgaver. Derefter kombinerer vi disse mindre funktioner igen for at løse det oprindelige problem.

Lad os læse kravene igen:

Vi er nødt til at finde teknologititlerne på en liste over bøger, forberede bogobjektet med al information til visningen og sortere bøgerne efter forfatterens navn.

Vi oprettede:

  • isTechnology() prædikat for at kontrollere, om det er en teknologibog
  • toViewBook() at bygge et objekt med al information til visningen
  • ascByAuthorname() at sortere to bøger stigende efter forfatterens navn
  • getBooks() at kombinere alle disse små funktioner sammen i en punktfri stil
function getBooks(){ return books.filter(isTechnology) .map(toBookView) .sort(ascByAuthor); }

Skridt mod punktfri komposition

Der er ingen yderligere anonym tilbagekaldelse, når du laver punktfri komposition. Intet functionnøgleord, ingen pilsyntaks => . Alt, hvad vi ser, er funktionsnavne.

  • I de fleste tilfælde skal du trække tilbagekaldene ud i navngivne funktioner.
  • I enkle tilfælde skal du bare bruge en hjælpefunktion fra værktøjskassen til at oprette tilbagekald på farten. Se prop()for eksempel på funktionen.
  • Skriv koordinatorfunktionen i en punktfri stil.

Små funktioner

Konsekvensen af ​​at skrive kode på denne måde er mange små funktioner med hensigt, der afslører navne. At navngive disse små funktioner kræver tid, men hvis det gøres godt, vil det gøre koden lettere at læse.

Der vil være to slags funktioner:

  • Funktioner, der udfører en opgave: de er rene eller lukningsfunktioner. Normalt er de ikke bygget i en punktfri stil, men i stedet har de gode navne.
  • Funktioner, der koordinerer mange opgaver: sammenføjning af disse små opgaver i en punktfri stil gør det lettere at læse.

Ikke alt er punktfrit

Jeg sigter ikke mod at have alt punktfri. Jeg sigter mod punktfri bestemte steder, især når jeg komponerer funktioner.

Discover Functional JavaScript blev udnævnt til et afbedste nye funktionelle programmeringsbøger fra BookAuthority !

For mere om anvendelse af funktionelle programmeringsteknikker i React, se på Functional React .

Lær funktionel reaktion på en projektbaseret måde med funktionel arkitektur med React og Redux .

Følg på Twitter