„JavaScript Currying“: slaptas padažas, skirtas sklandžiau, švaresniam kodui

„Currying“ yra „JavaScript“ metodas, kai funkcija su keliais argumentais paverčiama funkcijų serija, kurių kiekviena turi po vieną argumentą.
Kodėl Currying?
- Lankstumas: leidžia kurti naujas funkcijas iš esamų funkcijų, iš anksto nustatant kai kuriuos argumentus, o kitus paliekant atvirus.
- Pakartotinis naudojimas: Funkcijos gali būti pakartotinai naudojamos su kai kuriais iš anksto užpildytais argumentais.
- Paprastumas: Tai palengvina kodavimą dirbant su sudėtinga logika.
Kaip pasiekti „Currying“ naudojant „JavaScript“.
„JavaScript“ sukūrimas gali būti atliekamas dviem būdais:
Naudojant Įpareigoti
Naudojant Uždarymai
Išnagrinėkime abu įgyvendinimus naudodami paprastą daugybos funkciją, kuriai reikia dviejų parametrų num1
ir num2
. Dabar man reikia funkcijos, kuri padaugina skaičių iš dviejų, o tai reiškia, kad jai reikia vieno parametro, o pateiktas skaičius bus padaugintas iš 2. Norėdami tai išspręsti, naudokite currying.
Įrišimo įgyvendinimas
Turėkime funkciją, kuri padaugina du skaičius:
let multiply = (num1, num2) => {
return num1 * num2
}
Taip galime naudoti currying, kad įgyvendintume antrąją funkciją multiplyBy2.
let multiplyBy2 = multiply.bind(this, 2)
Taip galima iškviesti funkcijas
multiply(2, 3) // Returns 6
multiplyBy2(4) // Returns 8
Uždarymo įgyvendinimas
Uždarymo atveju turėsime pakeisti multiply
funkcija taip, kad ji turėtų vidinę antrojo argumento funkciją.
let multiply = function(x) {
return function(y) {
return x*y
}
}
Čia vidinė funkcija turi prieigą prie pagrindinės funkcijos apimties. Tai vadinama uždarymas JavaScript. Įgyvendinkime savo multiplyBy2
funkcija čia.
let multiplyBy2 = multiply(2)
Taip galima iškviesti funkcijas:
multiply(2)(3) // Returns 6
multiplyBy2(4) // Returns 8
Taip Currying gali būti įdiegtas JavaScript.
Naudokite dėklus kariui
Vienas realus pavyzdys, kai galime naudoti Currying, yra registravimo funkcijos įgyvendinimas. Funkcija paims du argumentus Lygis ir Pranešimas. Naudodami Currying galime kurti skirtingų žurnalų lygių funkcijas. Pažiūrėkime, kaip galime tai įgyvendinti.
const logger = (level) => (message) => `[${level}] ${message}`
// Currying
const debug = logger('debug')
const info = logger('info')
const warning = logger('warning')
const error = logger('error')
// Functions invocation
debug("Checking if the values is coming") // Returns "[debug] Checking if the values is coming"
info("API called successfully") // Returns "[info] API called successfully"
warning("Server returned a warning message") // Retuns "[warning] Server returned a warning message"
error("Something went wrong while calling the API") // returns "[error] Something went wrong while calling the API"
Ačiū, kad skaitėte!
Įvertinkite sugaištą laiką ir tikimės, kad šis įrašas buvo vertingas.
Išbandykite „curry“ kitame „JavaScript“ projekte ir toliau pateiktuose komentaruose praneškite man, kaip tai pagerina jūsų kodavimo patirtį!