Currying N arguments घेणार्या फंक्शनला N फंक्शनच्या साखळीमध्ये रूपांतरित करते जी प्रत्येकी एक argument घेते. Partial application आत्ता काही arguments निश्चित करते आणि बाकी वाट पाहणारे फंक्शन परत करते.
// normal
const add = (a, b, c) => a + b + c;
// curried — one argument at a time
const curriedAdd = a => b => c => a + b + c;
curriedAdd(1)(2)(3); // 6
// partial application — pre-fill some args
const add10 = curriedAdd(10); // a is fixed at 10
add10(5)(1); // 16
प्रत्येक स्टेप पूर्वी arguments लक्षात ठेवण्यासाठी closure वापरते जोपर्यंत सर्व पुरविलेले नसतील.
हे का उपयोगी आहे: विशेषीकृत फंक्शन्स बांधणे
const log = level => message => console.log(`[${level}] ${message}`);
const error = log("ERROR"); // reusable, pre-configured logger
const info = log("INFO");
error("disk full"); // [ERROR] disk full
स्तर सर्वत्र पुनरावृत्ती करण्याऐवजी, आप एकदा कॉन्फिगर केलेले फंक्शन्स तयार करता. हे कार्यात्मक पाइपलाइन्स आणि इव्हेंट हँडलर्समध्ये चमकते:
const onChange = field => e => setForm(f => ({ ...f, [field]: e.target.value }));
<input onChange={onChange("email")} /> // a handler specialized to "email"
सामान्य curry / libraries
Libraries (Ramda, lodash curry) कोणतेही फंक्शन auto-curry करतात जेणेकरून आप arguments लचकदार गटांमध्ये पुरवू शकता.
हे का महत्वाचे आहे
Currying स्वच्छ function composition, पुनः वापरयोग्य कॉन्फिगर्ड callbacks, आणि point-free style सक्षम करते.
हे कार्यात्मक codebases मध्ये सामान्य आहे आणि closures समजून घेण्यास चाचणी करण्यासाठी वारंवार interview विषय आहे.
