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 lysOvervej 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 teknologibogtoViewBook()
at bygge et objekt med al information til visningenascByAuthorname()
at sortere to bøger stigende efter forfatterens navngetBooks()
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 function
nøgleord, ingen pilsyntaks =&
gt; . 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