fp-filters: بیش از ۱۳۰ تابع آماده برای filter در جاوااسکریپت
خلاصهٔ کاملتر
fp-filters یه پکیج npm هست که بیش از ۱۳۰ تابع فیلتر پرکاربرد رو به سبک برنامهنویسی تابعی جمع کرده. سازندهش، Pierluigi Pesenti، میگه هدفش اینه که دیگه مجبور نباشی یه callback ساده رو بارها و بارها بنویسی و کدت هم خواناتر بشه. این توابع predicate هستن، یعنی ورودی میگیرن و فقط true یا false برمیگردونن، پس مستقیم میشه پاسشون داد به filter یا find.
توابع بر اساس نوع داده دستهبندی شدن: boolean، تاریخ، عدد، رشته، آبجکت، آرایه، نوع و موقعیت. مثلاً به جای اینکه دستی چک کنی روز تاریخ شنبه یا یکشنبهست، isWeekend رو میدی؛ یا به جای مقایسهٔ چند property، از hasProps استفاده میکنی:
// without fp-filters
products.filter((obj) => obj.id !== undefined && obj.plu !== undefined);
// with fp-filters
products.filter(hasProps(['id', 'plu']));بعضی توابع higher-order هستن (یعنی یه تابع دیگه برمیگردونن)، مثل isBetween(10, 50) یا is(currentUserId)، که partial application (یعنی از قبل چند آرگومان رو ثابت کردن) رو تو فیلترها ممکن میکنن. بیشترشون یه نسخهٔ منفی هم دارن، مثل isNot یا isNotBetween. با کتابخونهٔ همراهش fp-booleans هم میتونی با not، and و or فیلترهای خودت رو ترکیب کنی.
یه نکتهٔ مهم طراحی اینه که هیچ barrel file (یعنی فایل index که همه چیز رو یهجا export کنه) یا entry point مشترکی نداره. هر تابع رو باید از مسیر خودش import کنی، مثل fp-filters/number/isEven.js. نویسنده میگه این از tree-shaking هم مطمئنتره، چون فقط همون چند بایتی که استفاده میکنی وارد باندل میشه.
بیشتر توابع یهخطیان و طولانیترینشون حدود ۱۰ خطه. اکثرشون هیچ وابستگی ندارن و بعضی فقط به fp-booleans وابستهن. همه با TypeScript تایپ شدن، هرچند هنوز چند جا unknown دارن. نویسنده هشدار میده که isBoolean با array.filter(Boolean) فرق داره، چون دومی مقدار رو cast میکنه و truthy بودنش رو میسنجه.
نکات کلیدی:
- بیش از ۱۳۰ تابع فیلتر، دستهبندیشده بر اساس نوع داده.
- هر تابع جدا import میشه و barrel file وجود نداره.
- همهٔ توابع pure هستن و پوشش تست ۱۰۰٪ دارن؛ ۱۳۰+ تست زیر ۱ ثانیه اجرا میشه.
- برای ترکیب و منفی کردن فیلترها از fp-booleans با not، and و or استفاده میکنه.
- با TypeScript تایپ شده و تحت مجوز MIT منتشر شده.




