به طور خلاصه برنامهنویسی تابعگرا یک شیوه از کد نویسی است که ما در آن به جای استفاده از حلقهها و دستورات شرطی فقط از صدا زدن توابع خالص (pure functions) استفاده میکنیم، همچنین دادهها در این شیوه برنامهنویسی تغییر ناپذیر (immutable) هستند.
در میان شیوههای برنامهنویسی، برنامهنویسی تابعگرا در دسته برنامهنویسی اعلانی قرار میگیرد. در این شیوه از برنامهنویسی ما به سیستم میگوییم میخواهیم که چه چیزی اتفاق بیفتد به جای اینکه به سیستم بگوییم چگونه کار را انجام دهد. یک مثال از این مدل زبانهای برنامهنویسی زبان SQL است.
تابع خالص چیست؟
تابع خالص تابعی است که فقط بر مقدار آرگومانهای ورودیاش تکیه دارد و برای هر ورودی مشخص ، خروجیاش تغییر نمیکند. این بدان معنی است که تابع خالص نباید متغیری را خارج از محدوده (socpe) خودش بخواند ( به عنوان مثال متغیرهای سراسری).
مسلم است که نمیتوان همهی تابعها را در یک برنامه به صورت تابع خالص نوشت، مثلا توابعی که چیزی را از فایلسیستم میخوانند یا یک صفحه وب را از اینترنت واکشی میکنند ممکن است که خروجی متغیری داشته باشند. ما به عنوان برنامهنویس باید سعی کنیم تا جای ممکن توابع را به صورت توابع خالص بنویسیم، اگر چه نوشتن ٪۱۰۰ توابع به صورت خالص ممکن نیست ولی با سعی و تلاش میتوان حدود ٪۸۵ از توابع را به صورت توابع خالص نوشت.
از آنجا که در برنامهنویسی تابعگرا دادهها تغییرناپذیر هستند ممکن است برای شما این سوال پیش آید که چگونه برنامه را بدون تغییر دادن دادهها بنویسیم؟ در عمل ما به جای اینکه ساختمانداده مورد نظر را تغییر دهیم یک ساختمانداده جدید از روی آن میسازیم. به عنوان مثال فرض کنید یک آرایه ۴ خانه داریم که میخواهیم آخرین خانه را حذف کنیم، به جای تغییر این آرایه یک کپی از روی آن درست میکنیم که خانه آخر حذف شده است.
توابع کمکی در برنامه نویسی تابعگرا
تمام زبانهای برنامهنویسی تابعگرا دارای تعداد زیادی تابع کمکی (helper functions) هستند که نوشتن کد به صورت تابعگرا را برای برنامهنویس تسهیل می کند. به عنوان مثال از آنجا که حلقهها (for, while) در برنامهنویسی تابعگرا وجود ندارند زبانهای تابعگرا تابعی بنام map دارند که یک مجموعه از دادهها را میگیرد و مقدار هر یک از دادهها را به صورت تک به تک به تابع مورد نظر میفرستد تا بر روی آن عملیات انجام شود (در بعضی از زبانها از بازگشت به جای حلقهها استفاده میشود). یا مثلا به جای دستور شرطی if توابعی به نام find یا from وجود دارند که از میان مجموعه دادهها آنهایی که با شرط مورد نظر همخوانی دارند را واکشی میکنند.
پ.ن: این مقاله یک ترجمه آزاد از بخشی از فصل هفتم کتاب Modern JavaScript Applications است که مقوله برنامهنویسی فانکشنال را خیلی ساده و کاربردی توضیح داده است.