تابع چندگانه در جاوااسکریپت به چه معناست؟
در کدهای React، ممکن است با توابعی مواجه شوید که ظاهری مشابه زیر دارند:
handleChange = field => e => {
e.preventDefault();
/// Do something here
}
این نوع توابع در واقع توابع currying هستند. به عبارت دیگر، تابع handleChange
یک تابع را به عنوان خروجی برمیگرداند که سپس میتواند به عنوان ورودی یک تابع دیگر استفاده شود. این الگو به برنامهنویس اجازه میدهد که به طور موثری از توابع با پارامترهای ثابت استفاده کند و همچنین متغیرهای اضافی را به تابع داخلی منتقل کند.
برای درک بهتر، میتوانیم مثالی سادهتر را بررسی کنیم:
const add = (x, y) => x + y; // تابع عادی
این تابع را میتوانیم به شکل curry بازنویسی کنیم:
const add = x => y => x + y; // تابع کرودی
استفاده از توابع curry در شرایطی بسیار مفید است که بخواهیم یک تابع را با پارامترهای ثابت به طوری طراحی کنیم که بتوانیم در فراخوانیهای بعدی، تنها پارامترهای تازهای را وارد کنیم. به عنوان مثال:
const handleClick = id => event => {
event.preventDefault();
// Dispatch some delete action by passing record `id`
}
const Confirm = props => (
<div>
<h1>Are you sure to delete?</h1>
<button onClick={handleClick(props.id)}>
Delete
</button>
</div>
)
در این سناریو، توانستیم از توابع curry برای جلوگیری از استفاده از متغیرهای جهانی و به دست آوردن دسترسی به id
در محدوده داخلی تابع استفاده کنیم.
ترکیب توابع
توابع curry همچنین نقش مهمی در ترکیب توابع ایفا میکنند. با استفاده از ترکیب تابع، میتوانیم توابع را به هم متصل کنیم تا نتیجهای جدید بسازیم. به عنوان مثال، با استفاده از ترکیب توابع، میتوانیم توابعی مانند pickSelectedUser
و deleteUser
را به گونهای ترکیب کنیم که:
const handleClick = compose(
deleteUser,
pickSelectedUser,
);
در اینجا، تابع جدید handleClick
پارامترهایی را از طریق توابع مختلف دریافت میکند و وارد تابع بعدی میکند.
نتیجهگیری
استفاده از توابع curry در جاوااسکریپت نه تنها به ما کمک میکند تا کدهای قابل فهمتری بنویسیم، بلکه به ما این امکان را میدهد که توابع را به راحتی ترکیب کنیم و متغیرهای اضافی را در محدوده داخلی نگه داریم. این تکنیک در برنامهنویسی عملکردی به طور گستردهای مورد استفاده قرار میگیرد و به ایجاد کدهای تمیز و کارآمد کمک میکند.