استفاده از Currying در JavaScript

امروز سر یه Merge request صحبت از Currying شد که البته روش خیلی ساده‌ایه ولی چون برای بعضی از بچه ها جالب بود گفتم این جا هم بذارمش شاید برای کسی مفید باشه.

خلاصه میگم که وقتتون رو نگیرم...

(تو همه زبان ها میشه از Currying استفاده کرد ولی مثال ها رو با JavaScript آماده کردم )


تو ساده‌ترین حالت برای Function composition از این روش استفاده می‌کنیم:

ولی بعضی وقتا مثل همین حالت بالا، تعداد پرانتزها زیاد و باعث نامرتب شدن کدها میشه...

برای حل این مشکل معمولا میایم از Higher-order Functions ها استفاده می‌کنیم که بتونیم توابعی که داریم رو ترکیب کنیم و یا اگه پروژه Js ای هست میتونیم از Lodash استفاده کنیم که میشه اینطوری:

مشکل زمانی پیش میاد که توابعی داریم که بیشتر از یک آرگومان دارن، مثلا:

اینجا چند تا موضوع پیش میاد:

  • ورودی pipe حتما باید یک تابع رو return کنه (نمیتونیم از call شده‌ی تابع استفاده کنیم)
  • موقعی که از pipe استفاده می‌کنیم خروجی تابع سمت چپ به عنوان ورودی تابع سمت راست داده میشه.

پس با دونستن این 2 مورد میتونیم این مشکل رو با استفاده از Currying حل کنیم، که میشه اینطوری:


اگه کنجکاوین با Currying بیشتر آشنا بشین این دو تا لینک میتونه کمک کنه:

https://en.wikipedia.org/wiki/Currying#:~:text=In%20mathematics%20and%20computer%20science,each%20takes%20a%20single%20argument
https://javascript.info/currying-partials




Currying (post's cover image)
Currying (post's cover image)