بررسی برنامه‌نویسی تابعی (Functional Programming)
1398/02/07 12:18 , میلاد صاحب نظر

بررسی برنامه‌نویسی تابعی (Functional Programming)

درست است که اکثر ما هر روز با زبان‌های شیءگرا کار می‌کنیم، اما دانستن در مورد دیگر پارادایم‌های برنامه‌نویسی مانند برنامه‌نویسی تابعی (Functional Programming) نیز خالی از لطف نیست. در این پست، قصد داریم برنامه‌نویسی تابعی و مزایای آن را بررسی و درک کرده و همچنین چند نمونه که در زبان #F نیز ببینیم.

برنامه‌نویسی تابعی

برنامه‌نویسی تابعی یک مدل برنامه‌نویسی است که در آن شما کدها را مشابه با توابع ریاضی می‌نویسید. عملکرد توابع مانند expression evaluatorهایی که برای یک ورودی خاص، نتایج پیوسته تولید می‌کنند، می‌باشد.

برنامه‌نویسی تابعی بیشتر از اینکه به دستورالعمل راجع به اینکه کار چگونه باید انجام شود اهمیت دهد، به نتیجه حاصله اهمیت می‌دهد.

در زیر یک قطعه کد ساده از برنامه‌نویسی تابعی نوشته شده به زبان #F را مشاهده می‌کنید:

زبان‌های برنامه‌نویسی تابعی محبوب دیگری هم مانند Haskell، Erlang، Scala و غیره نیز وجود دارند.

برنامه‌نویسی تابعی در برابر برنامه‌نویسی رویه‌ای / تکراری

چون اکثر توسعه‌دهندگان به کد نویسی رویه‌ای عادت کرده‌اند، پس درک تفاوت‌های بین مدل‌های برنامه‌نویسی تابعی و رویه‌ای نیز مهم است.

  1. برنامه‌نویسی تابعی (FP) در مورد نتیجه است و برنامه‌نویسی دستوری (IP) دستورالعمل گام‌به‌گام در مورد چگونگی انجام رویه فراهم می‌کند.

  2. FP از هیچ شیء یا state استفاده نمی‌کند، اما IP اکثراً روی برنامه‌نویسی شیءگرا کار می‌کند و به Stateها وابسته است.

  3. FP روی مقادیر immutable کار می‌کند در حالی که مقادیر IP از نوع mutable هستند. در واقع FP با توابع مانند مقادیر رفتار می‌کند.

  4. در FP ترتیب اجرا اهمیت چندانی ندارد، اما برای IP اجرای سلسله‌ مراتبی اجتناب‌ناپذیر است.

از طریق برنامه‌نویسی تابعی چه نتیجه‌ای حاصل می‌شود؟

در این بخش مزایای استفاده از برنامه‌نویسی تابعی را بررسی می‌کنیم و خواهیم دید که به چه شکلی به ما کمک می‌کند.

  1. کدها دقیق هستند و در نتیجه تعداد خط کد کمتری نیاز است.

  2. چون توابع به state وابستگی ندارند و اکثراً به تنهایی یا مجزا نوشته می‌شوند، این امر باعث می‌شود قابلیت تست unit کدها بهبود یابد.

  3. این روش، مسیر پیاده‌سازی موازی را بهبود می‌بخشد و تسهیل می‌کند.

  4. زبان‌های برنامه‌نویسی تابعی مانند #F در رانتایم از یک نوع رفرنس سطح بالا استفاده می‌کنند تا شما در هنگام کد نویسی لازم نباشد نوع خاصی تعریف کنید.

  5. برنامه‌نویسی تابعی امکان توسعه سریع را فراهم می‌کند، چون لازم نیست الگوها هر کدام همانند خط‌های کد با یک سمی کالن بسته شوند، توابع با آکولاد‌ها محصور می‌شوند، نیاز به ایجاد کلاس و تمرکز روی ساختار کد نیز نمی‌باشد.

برخی از نقاط ضعف این روش این است که سازماندهی کد مشکل است و به خاطر وجود توابع تکراری زیاد (وقتی تعداد خطوط کد زیادی می‌شود) ممکن است کمی بی‌‌نظمی رخ دهد. همچنین در این روش، کد همانند دیگر زبان‌ها ساختاربندی خاصی ندارد.

انواع مختلف توابع

یک زبان برنامه‌نویسی تابعی از انواع توابع مختلفی پشتیبانی می‌کند که در ادامه آن‌ها را بررسی می‌کنیم.

تابع خالص (Pure Function)

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

اولین نمونه کدی که در این پست مشاهده کردید مثال خوبی برای یک تابع خالص است.

تابع First Class

توابعی که می‌توانند به شکل آرگومان به توابع دیگر منتقل شوند، می‌توانند به یک متغیر اختصاص داده شوند، می‌توانند به یک ساختمان داده اضافه شوند یا می‌توانند به عنوان مقدار بازگشتی یک تابع دیگر تنظیم شوند را توابع First Class می‌نامند. توابع First class یک بخش عددی (integral) از مدل برنامه‌نویسی تابعی هستند.

مثال زیر به زبان #F نوشته شده است.

اختصاص تابع به یک متغیر:

ذخیره توابع در یک ساختمان داده:

تابع Higher order (رده بالا)

توابع Higher order همان توابعی هستند که می‌توانند توابع دیگر را به عنوان آرگومان بپذیرند و همچنین می‌توانند مقدار را به عنوان خود تابع بازگردانند. این توابع عمدتاً برای ایجاد ترکیبی از توابع به کار می‌روند. در ادامه، مثالی از یک تابع Higher order را مشاهده می‌کنید:

مفاهیم خیلی بیشتری در برنامه‌نویسی تابعی وجود دارند (مانند الگوریتم بازگشتی، pattern matching و غیره) که در مطالب دیگر به توضیح آن‌ها خواهیم پرداخت.

چون مدل برنامه‌نویسی تابعی نسبت به برنامه‌نویسی دستوری بسیار متفاوت است، ممکن است در ابتدا برای هر توسعه‌دهنده‌ای کمی نامأنوس و غریب به نظر برسد. اما اگر قلق آن دستتان بیاید، برایتان جالب خواهد شد.

منبع: developer 

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
7 دلیل منطقی برای آموختن #C
 طبقه بندی زبان های برنامه نویسی
به دست آوردن Exceptionها در #C و یافتن همه خطاها
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات