Currying ja osittainen soveltaminen
Muuntaa usean argumentin funktiot curried-muotoon.
Currying ja osittainen soveltaminen on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä currying tarkoittaa?
Currying muuntaa usean argumentin funktion yksittäisten argumenttien funktioiden ketjuksi. Sen sijaan että kutsuisitte f(a, b), kutsutte f(a)(b).
Perusesimerkki
Tässä add ottaa yhden luvun ja palauttaa funktion, joka odottaa seuraavaa lukua. TypeScript päättelee sisäkkäisten funktioiden tyypit automaattisesti.
const add = (a: number) => (b: number) => a + b;
console.log(add(2)(3)); // 5Curried-funktion tyypitys
Eksplisiittinen tyyppi näyttää ketjun selkeästi: funktio palauttaa funktion. Jokainen nuoli vastaa yhtä argumenttia.
type Add = (a: number) => (b: number) => number;
const add: Add = a => b => a + b;
console.log(add(10)(5)); // 15Osittainen soveltaminen
Osittaisessa soveltamisessa osa argumenteista annetaan nyt ja loput myöhemmin. Curried-funktiolla tämä tarkoittaa yksinkertaisesti sen kutsumista harvemmilla vaiheilla.
const add = (a: number) => (b: number) => a + b;
const add10 = add(10); // partially applied
console.log(add10(1), add10(2)); // 11 12Osittaisen soveltamisen hyödyt
Voitte muodostaa yleisistä funktioista erikoistuneita funktioita. add10 on uudelleenkäytettävä ja nimetty työkalu, joka on johdettu yleisestä add-funktiosta. Tämä parantaa luettavuutta ja uudelleenkäytettävyyttä.
Kolmen argumentin currying
Malli toimii millä tahansa argumenttimäärällä. Jokainen taso sulkee yhden argumentin sulkeumaan, kunnes lopullinen arvo tuotetaan.
const clamp = (min: number) => (max: number) => (x: number) =>
Math.min(Math.max(x, min), max);
const toByte = clamp(0)(255);
console.log(toByte(300), toByte(-5)); // 255 0Sopii mainiosti map- ja filter-metodeihin
Curried-funktiot sopivat hyvin taulukkometodeihin, koska map odottaa yhden argumentin funktiota. Osittainen soveltaminen tuottaa juuri tällaisen funktion.
const mul = (a: number) => (b: number) => a * b;
const triple = mul(3);
console.log([1, 2, 3].map(triple)); // [3, 6, 9]Geneerinen curry-apufunktio
Voitte kirjoittaa tyypitetyn apufunktion, joka muuntaa kaks argumenttia ottavan funktion curried-muotoon. Geneeriset tyypit säilyttävät parametri- ja paluuarvojen tyypit täsmällisinä.
function curry2<A, B, R>(f: (a: A, b: B) => R) {
return (a: A) => (b: B) => f(a, b);
}
const join = curry2((a: string, b: string) => a + b);
console.log(join("foo")("bar")); // foobarSulkeumat kaappaavat argumentit
Currying toimii, koska jokainen palautettu funktio sulkee aiemmat argumentit sulkeumaansa. Arvot pysyvät käytettävissä, kunnes viimeinen kutsu käyttää niitä.
const greet = (greeting: string) => (name: string) =>
greeting + ", " + name;
const hi = greet("Hi");
console.log(hi("Sam")); // Hi, SamMilloin curryingia ei kannata käyttää
Kaikkien funktioiden muuttaminen curried-muotoon voi heikentää luettavuutta. Käyttäkää sitä, kun osittaisesta soveltamisesta on aidosti hyötyä, esimerkiksi uudelleenkäytettävien apufunktioiden määrittämisessä tai käsittelyputkien koostamisessa.
Currying ja oletusargumentit
Oletusparametrit tarjoavat oletusarvoja, mutta eivät vaiheittaista soveltamista. Currying tarjoaa aidon osittaisen soveltamisen ja palauttaa varsinaisen funktion, jonka voitte välittää eteenpäin ja käyttää uudelleen.
Pikatarkistus
Tämän oppitunnin pikatarkistus.
Kertaus
Currying muuttaa muodon f(a, b) muotoon f(a)(b): kyseessä on sisäkkäisten nuolityyppien muodostama yhden argumentin funktioiden ketju. Osittaisessa soveltamisessa alkuosan argumentit kiinnitetään uudelleenkäytettävien erikoistettujen funktioiden muodostamiseksi, sulkeumien avulla.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 101
- Oppitunnit
- 352
Usein kysytyt kysymykset
Onko oppitunti ”Currying ja osittainen soveltaminen” ilmainen?
Kyllä – oppitunnin ”Currying ja osittainen soveltaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Currying ja osittainen soveltaminen”?
Muuntaa usean argumentin funktiot curried-muotoon. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Currying ja osittainen soveltaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?
Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Puhtaat funktiot ja muuttumattomuus
- Currying ja osittainen soveltaminen
- Funktioiden koostaminen tyyppien avulla
- Tyypitetyt pipe- ja flow-apufunktiot