آنچه در این مقاله میخوانید
مقدمهای بر برنامهنویسی فانکشنال
۲۹ خرداد ۱۴۰۰
مطمئنا بهعنوان یک توسعهدهنده متوجه شدهاید که نرمافزارها هر روز پیچیدهتر میشوند و توسعه و نگهداری از یک برنامه به سادگی قبل نیست. همچنین وظیفهی توسعه، تست، نگهداری و گسترش برنامههای پیچیدهای که روزانه میلیونها نفر را تحت تاثیر قرار میدهند، برعهدهی شما است.
بههمین منظور باید از همان ابتدای توسعه، کدها را با ساختار مناسبی بنویسیم که درک، توسعه، دیباگینگ و نگهداری از آن آسان باشد و حتی قادر باشیم مجددا از آن کدها در بخشهای دیگری استفاده کنیم. البته این موضوع برای مبتدیان بسیار دلهرهآور خواهد بود زیرا آنها در حال توسعهی برنامههایی هستند که فقط کار میکند و نوشتن کدهایی با این قابلیتها دشوار است.
آنچه در این مقاله میخوانید:
- چرا باید برنامهنویسی فانکشنال را یاد بگیریم؟
- برنامهنویسی فانکشنال چیست؟
- مزایای برنامه نویسی فانکشنال
- معایب برنامه نویسی فانکشنال
- جمعبندی

چرا باید برنامهنویسی فانکشنال را یاد بگیریم؟
برنامهنویسی فانکشنال به شما کمک میکند تا یاد بگیرید چگونه کدهای تمیزی بنویسید که نگهداری آنها آسان باشد و همچنین قادر خواهید بود برنامهی خود را بهآسانی توسعه دهید. البته شاید با خودتان بگویید که در محل کار یا پروژهای که بر روی آن کار میکنید از زبانهای برنامهنویسی فانکشنال استفاده نمیشود اما مطمئن باشید دانستن اصول برنامهنویسی فانکشنال تاثیر بسیار زیادی در بهتر نوشتن کدها خواهد داشت.
برنامهنویسی فانکشنال چیست؟
برنامهنویسی فانکشنال روشی برای نوشتن کدها با تاکید بر استفاده از فانکشنها است بنابراین نمیتوان آن را محدود به یک فریمورک یا ابزار دانست. همچنین برنامهنویسی فانکشنال فقط به استفاده از فانکشنها محدود نمیشود و تفاوتهای زیادی وجود دارد زیرا فانکشنها در همهی زبانهای برنامهنویسی وجود دارند اما نحوهی استفاده از آنها اهمیت دارد.
بیایید برای درک بهتر این روش با برخی اصولهای مقدماتی شروع کنیم. در هر برنامهای دو موضوع اصلی مطرح است:
- چگونگی انجام کارها
- دادهها
انجام کارها در برنامهنویسی فانکشنال به فانکشنها سپرده میشود و هر فانکشن، یک کار خاص را برای ما انجام میدهد. به زبان ساده میتوان گفت که دادهها توسط فانکشنها دریافت میشوند و یک خروجی پس از پردازش دادهها برگشت داده میشود و هر فانکشن میتواند بارها و بارها این کار را انجام دهد.
دادهها در برنامهنویسی فانکشنال immutable هستند یعنی پس از مقداردهی یک متغیر نمیتوانید تغییری در آن ایجاد کنید و اینجاست که ما از فانکشنها کمک میگیریم تا با دریافت این دادهها یک خروجی مناسب را در اختیار ما قرار دهند.
البته شما میتوانید در برنامهنویسی فانکشنال از فانکشنها بهعنوان پارامترهای ورودی یک فانکشن دیگر استفاده کنید و فقط نیاز خواهید داشت تا خروجی هر تابع را return کنید.

به این شکل آزادی بیشتری در استفاده از فانکشنهای کوچک و مستقل خواهیم داشت که در بخشهای دیگر پروژه قابل استفاده هستند و میتوانیم منطقهای پیچیدهتری را با ترکیب آنها پیادهسازی کنیم.
مزایای برنامه نویسی فانکشنال
در برنامهنویسی فانکشنال برنامهنویس فقط باید نتیجهای را که میخواهد بنویسد نه تمامی مراحلی که لازم است به آن نتیجه رسید. پس تعداد عباراتی که باید نوشته شود، بسیار کم میشود.
خروجی تابع فقط آن مقداری است که از او خواسته شده است. توابع از مقادیر غیرقابلتغییر استفاده میکنند. در برنامهنویسی تابعی خروجی پنهان یا خروجی اضافی تولید نمیشود. همین ویژگی بسیار مهم یعنی تعداد خطاها بسیار کم میشود و همین یعنی debugging بسیار سریع و آسان.
این نوع از برنامهنویسی برای ایجاد و اجرای همزمانیها (concurrency/parallelism) بسیار ایدهآل است. چون کار هر تابع و مقداری که باید برگرداند مشخص است، اجرای تابعی مانع اجرای تابع دیگری نیست. همین یعنی در برنامهنویسی فانکشنال و بااستفاده از زبانهای تابعی برنامهنویسی ناهمگام یا Asynchronous بهراحتی ممکن میشود.
معایب برنامه نویسی فانکشنال
درکنار همهی مزیتهای این نوع از برنامهنویسی باید به معایب آنهم اشاره کرد:
- گاهی ممکن است فقط به زبان توابع محض نوشتن خوانایی کدها را کمی سخت کند.
- اگر هم نوشتن با زبان تابعی محض را کار آسانی فرض کنیم، ترکیبکردن این زبان با زبانهای دیگر کار اصلا آسانی نیست.
- شاید برای کسانیکه خیلی با ریاضی و تابعها میانهی خوبی ندارند، یادگیری این نوع از برنامهنویسی کمی سخت باشد. چون توابع هم مانند متغیرها و عملگرهای کنترلی و منطقی از مفاهیم اولیه در زبان برنامه نویسی پایتون هستند.
- برنامههایی که با زبانهای فانکشنال نوشته میشوند بسیار سنگین هستند و در نتیجه به فضای زیادی برای ذخیرهکردنشان نیاز است.
جمعبندی
با توجه به پیچیدگیهای روزافزون نرمافزارها میتوانیم با برنامهنویسی فانکشنال، روند توسعهی سادهتری داشته باشیم. همچنین کدهای پروژه، ماژولار و قابل فهم هستند که درنهایت توانایی بیشتری برای حل مشکلهای پیچیده و بزرگ در اختیار ما قرار میدهند.
منبع: https://medium.com/free-code-camp/learning-the-fundamentals-of-functional-programming-425c9fd901c6