Sådan bruges spredningsoperatøren på en funktion, og hvorfor du skulle!

Du kan ikke officielt gøre det, men du kan skrive en funktion, der gør næsten den samme ting. Lad os se, hvordan og måske hvorfor du skal.

Men først har du nogensinde fundet dig selv i denne situation?

Du ønskede at kalde en funktion med et input, når en anden funktion returneres ubegrænset for den samme input. Ovenstående fungerer, men ville det ikke være rart, hvis vi havde noget mere generaliseret?

Hvis vi brugte genstande, kunne dette godt udføres med en spredt operatør.

Ser det ikke pænere ud? Når jeg kalder combinedObj [x] returnerer det fObj [x] medmindre fObj er udefineret for x. I dette tilfælde vil gObj [x] blive returneret. Men hvad der virkelig er rart er, at jeg kan gøre det til ethvert antal objekter.

Så hvordan kan vi definere en funktion, der kunne sprede andre funktioner på samme måde som hvordan ... spreder objekter?

specs

Okay, så spredning skal være i stand til at tage to funktioner, f og g

og returnerer en funktion, der først kalder g med et input, og kun hvis g returnerer udefineret, ringer det f.

Vi kan definere de to funktioner, der er spredt på denne måde.

Hvis vi ønsker at sprede mere end to funktioner, kan vi ændre spredning for at tage en liste over funktioner.

Koden er også i bunden af ​​teksten, så du kan kopiere og indsætte den :)

Hvorfor? Cuz vi er doven ...

Nå, i sig selv er det bare en oprettelse, der følger et almindeligt javascript-koncept ('spredning'). Hvis du forstår, hvordan spredning fungerer med objekter, vil du forstå, hvordan spredning fungerer med funktioner. Tager lidt mindre hjernearbejde og regner derefter ud, hvad hvis udsagnet, hvis vi startede med, gjorde. Det er den samme grund til at vi bruger kort og reducerer. Der er mange måder at opnå, hvad kort og reduktion gør uden at bruge dem, men hvis vi bruger dem, bliver vores kode meget lettere at følge ved første øjekast.

Derudover giver spredning os mulighed for at indpakke objekter i funktioner til fordel for doven evaluering uden at ofre muligheden for at sprede. Med andre ord kan vi dovende sprede, når vi har brug for output.

Forestil dig for eksempel, at vi ønskede en enkelt værdi for en nøgle i et objekt, der blev oprettet ved at sprede to andre objekter.

Derefter skulle vi fremstille et helt nyt objekt kombineret med alle nye værdier, selvom vi kun havde brug for værdien for en enkelt nøgle, 'd'. Med vores funktionsspredning kan vi undgå at oprette et nyt objekt.

Da det spredning faktisk bygger er en logisk strøm af ternaries og funktioner, når vi beder om værdien af ​​en enkelt nøgle, udfører den logikken for at få værdien for kun den nøgle uden at bekymre sig om at få de andre værdier. Selv dette lille eksempel ser ud til at vise en præstationsgevinst. Hvis vi skulle sprede flere gange, kunne vi spare os for flere mellemobjekter og mere tid.

Endelig, da spread producerer en funktion, får vi også al den godhed at arbejde med funktioner som funktionskomposition! Her er koden igen i tekstform, så du kan kopiere og indsætte den:

Prøv det, og lad mig vide, hvad du synes!