Nu, termenul „curtau“ nu are nimic de-a face cu celebrul condiment și, în general, nu are nici o legătură cu bucătăria de est. Această tehnică în programarea funcțională, care permite transformarea funcției, înlocuindu-l cu primele câteva argumente la o valoare constantă, creând astfel o nouă funcție, cu mai puține argumente bazate pe vechi. Acest lucru va fi util atunci când primele câteva argumente ale unei funcții sunt cunoscute în avans și nu este nevoie să le specificați pentru fiecare apel. Pentru concizie, vom apela funcția de a converti karriruemoy și funcția pe care îl convertește, Carriere.
Deseori, sub condiția de currying, ne referim la înlocuirea valorii constante a unui singur argument al funcției care este întrebată. Vă sugerez să luăm în considerare un caz mai general, atunci când există mai multe alternative la funcția care trebuie înlocuită.
punerea în aplicare
Pentru a implementa mecanismul de currying, trebuie să scriem o funcție curry care să ia ca argumente funcția care trebuie curbată și valorile la care trebuie înlocuite primele argumente ale funcției care este interogată.
Să aruncăm o privire mai întâi la o versiune mai simplă, când funcția care trebuie curbată și numărul de argumente pentru a scăpa este cunoscută în prealabil. Ca o funcție curabilă, de exemplu, să luăm ceva simplu, de exemplu, o funcție care adaugă două numere:
Odată ce această funcție va fi expus curtau cu înlocuirea unui argument la o valoare care poate fi obținută o funcție care, de exemplu, creșteri (crește cu unul), descreșteri (decrementat) sau adăugat la argument predeterminate valoarea sa deja unică în avans.
Acest lucru se face relativ simplu:
În cazul în care funcția de transfer karriruemuyu cu un număr cunoscut de argumente ca argument Carriere, dar lasă încă o serie de argumente de substituție karriruemoy funcțiilor specificate, atunci problema este mai complicată ușor.
Să luăm în considerare o altă funcție simplă:
var sayHelloTo = curry (sayTwoWords, "Bună ziua"); spune HelloTo ("Bob"); sayHelloTo ("Marry"); var sayGoodbyeTo = curry (sayTwoWords, "Goodbye"); spune GoodbyeTo ("Bob"); sayGoodbyeTo ("Marry"); var minusThree = curry (suma, -3); console.log (minusThree (13)); // 10
Acum, luați în considerare o versiune mai complicată, când funcția care trebuie interogată este necunoscută în prealabil și numărul de argumente care trebuie înlocuite cu valori constante este necunoscut.
În funcția returnată, trebuie să apelăm funcția care trebuie curbată, înlocuind valorile din matricea curryArgs ca fiind primele argumente. și ca restul - valorile trecute ca parametri ai funcției returnate. Pentru a face acest lucru, vom folosi metoda nativă aplicată. care vă permite să apelați o funcție cu valorile argumentelor care îi sunt transmise în matrice. Această metodă de acceptare a matricei ia ca al doilea parametru. Ca prim, este nevoie de un obiect care se va întoarce când acesta este accesat în interiorul funcției. Înainte de a apela metoda aplicată din funcția căutată, convertiți obiectul argumentelor funcției returnate într-o matrice și lipiți-o folosind metoda concat. array de curryArgs cu matricea rezultată. Rezultatul acestei operații este trecut ca al doilea argument pentru metoda de aplicare. Ca rezultat, funcția curry are forma:
Cu toate acestea, această sintaxă este mai lungă și a trebuit să specificăm cel de-al doilea argument al funcției care este analizată, care pare a fi un lucru mic, dar inutil. Și acum imaginați-vă că lista argumentelor pentru o funcție curabilă este suficient de lungă sau este deloc variabilă în lungime. Și, deși curry funcționează mai lent, el isi atrage scurta si usurinta de utilizare.
Acum considerăm cazul limitator, când toate funcțiile sunt înlocuite cu valori constante pentru funcția curbată.
var createMessageBox = curry (createElement, 'DIV',);
Funcția createMessageBox va crea o div cu caseta de mesaje CSS și nu va accepta nici un parametru.
Asta-i tot ce pot să-ți spun despre currying. Ca întotdeauna, îți doresc succes!
A fost cu adevărat imposibil să se ia cuvântul "Transformarea"?
Ești un idiot. Cuvântul "currying" a venit în numele lui Curry Haskell. Ce înseamnă "transformarea"?