۵ زبان برنامه‌نویسی تابعی که باید بشناسید!
1398/02/31 16:38 , میلاد صاحب نظر

۵ زبان برنامه‌نویسی تابعی که باید بشناسید!

اگر کمی زمان صرف خواندن زبان‌های ترند و مورد توجه در اینترنت کرده باشید، پس حتماً راجع به برنامه‌نویسی تابعی شنیده‌اید. این واژه اخیراً زیاد به کار می‌رود، اما به چه معنا است؟

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

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

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

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

اساساً، برنامه‌نویسی تابعی با توابع و داده‌ها سر و کار دارد و این امر در این نوع برنامه‌نویسی یک عنصر تغییر ناپذیر است. شما داده را به یک تابع منتقل می‌کنید و تابع آن داده‌های منتقل شده یا نوعی دیگر از داده را بازمی‌گرداند. در برنامه‌نویسی تابعی، تابع هیچ‌وقت نباید داده‌ها یا شرایط اصلی و اورجینال برنامه را تغییر دهد.

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

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

برنامه‌نویسی تابعی در برابر شیءگرا

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

در برنامه‌ها و در منطق دنیای واقعی، گاهی این امر منطقی است.

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

  1. جاوا اسکریپت
    جاوا اسکریپت
    برخی از زبان‌های برنامه‌نویسی اجازه برنامه‌نویسی تابعی را به کاربر می‌دهند، در حالی که زبان‌های دیگر یا به نوشتن این نوع برنامه‌نویسی تشویق می‌کنند یا شما را مجبور به انجام آن می‌کنند. جاوا اسکریپت جزء دسته اول است.

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

    با این حساب، پارادایم‌های برنامه‌نویسی تابعی بسیار زیادی درون جاوا اسکریپت قرار گرفته‌اند. برای مثال، توابع مرتبه بالا را در نظر بگیرید. این‌ها توابعی هستند که می‌توانند توابع دیگر را به عنوان آرگومان دریافت کنند.

    جاوا اسکریپت دارای چندین تابع است که با آرایه‌هایی همچون  ()reduce()، filter() ،map و غیره کار می‌کنند و تمام آن‌ها توابع مرتبه بالا هستند. این امر به شما اجازه می‌دهد تا آن‌ها را به هم زنجیر (Chain) کنید تا بتوانید تمام کارها را با یک آرایه انجام دهید.

    اگرچه نسخه‌های اولیه جاوا اسکریپت دارای مشکلاتی با قابلیت بی‌صدایی بودند، اما ورژن‌های جدید ECMAScript standard این مشکلات را برطرف کردند. دیگر به جای اینکه همه جا از کلیدواژه var برای تعریف متغیرها استفاده کنید، حالا فقط کافی است از const و let استفاده کنید.

    const به شما اجازه می‌دهد ثابت‌ها را تعریف کنید، که نامش هم مشخص است. Let دامنه یک متغیر را به تابعی که در آن تعریف شده است محدود می‌کند.
  2. پایتون
    پایتون
    همانند جاوا اسکریپت، پایتون هم یک زبان کلی است که می‌توانید انواع مختلف پارادایم‌های برنامه‌نویسی را در آن به کار ببرید. پایتون ممکن است نقاط ضعفی هم داشته باشد، اما برنامه‌نویسی تابعی یکی از آن‌ها نیست. حتی در سند رسمی پایتون یک معرفی کامل برای برنامه‌نویسی تابعی وجود دارد.

    برای شروع، می‌توانید تعداد زیادی توابع مشابه با توابع بالا مانند ()reduce()، filter()، map و غیره را بیابید که درون کتابخانه‌های پایتون تعریف شده‌اند. همانند جاوا اسکریپت، این توابع نیز توابع مرتبه بالا هستند چون می‌توانند توابع دیگر را به عنوان آرگومان بگیرند.

    در پایتون، برنامه‌نویسی تابعی از مزیت کلیدواژه lambda بهره می‌برد.

    می‌توانید به چندین روش از عبارات lambdda استفاده کنید. یک روش، استفاده از آن به عنوان shorthand برای توابع ساده است. وقتی این عبارات به یک متغیر نسبت داده شوند، می‌توانید عبارات lambda را دقیقاً همان‌طور که یک تابع استاندارد پایتون را فراخوانی می‌کنید، فراخوانی کنید.

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

    توابع ناشناس در جاوا اسکریپت و بقیه زبان‌های موجود در لیست این مقاله کاربرد دارند. آن‌ها زمانی بسیار مفید واقع می‌شوند که با توابع مرتبه بالا به کار بروند، چون می‌توانید راحت آن‌ها را تعریف کنید. بدون توابع ناشناس، مجبور خواهید شد حتی ساده‌ترین چیزها (مثل توابع قراردادی) را از پیش تعریف کنید.
  3. Clojure
    Clojure
    بر خلاف جاوا اسکریپت و پایتون، Clojure اصلا زبان معروف و شناخته شده‌ای نیست، حتی در بین برنامه‌نویسان. اگر با این زبان آشنایی ندارید، باید بدانید که Clpjure یکی از گونه‌ها و اجداد زبان برنامه‌نویسی Lisp است که به اواخر دهه ۱۹۵۰ میلادی بازمی‌گردد.

    این زبان یک روش خیلی خاص برای انجام کارها دارد که از قضا برای برنامه‌نویسی تابعی عالی است.

    همانند دیگر گونه‌های Lisp، زبان Clojure با کد به عنوان داده رفتار مي‌کند. این بدان معنا است که کد می‌تواند به صورت مؤثری خودش را تغییر دهد. بر خلاف دیگر گونه‌های زبان Lisp، این زبان روی پلتفرم جاوا اجرا می‌شود و به JVM bytecode کامپایل می‌شود.

    یعنی اینکه این زبان می‌تواند با کتابخانه‌های جاوا کار کند، خواه با زبان Clojure نوشته شده باشند یا نه.

    بر خلاف زبان‌های قبلی در این لیست، Clojure یک زبان مختص برنامه‌نویسی تابعی است. این بدان معنا است که هر جا ممکن باشد این زبان غیر قابل تغییر است به خصوص در ساختمان‌های داده.

    Clojure انتظار ندارد که همه برنامه‌ها از لحاظ ریاضی و منطقی "قابل اثبات" باشند، بلکه در هر جا که ممکن باشد، کاربر را به استفاده از توابع خالص تشویق می‌کند.
  4. Elm
    Elm
    یکی از جدید‌ترین زبان‌ها در این لیست، زبان Elm است که یک زبان تابعی خالص است و ابتدا توسط ایوان زاپلیسکی در سال ۲۰۱۲ طراحی شد. این زبان در بین توسعه‌دهندگان وب بسیار محبوب است، به خصوص برای ایجاد واسط‌های کاربری.

    بر خلاف تمام زبان‌های قبلی این لیست، زبان Elm از بررسی نوع استاتیک استفاده می‌کند. این امر کمک می‌کند تا اطمینان یابیم که هیچ خطای رانتایمی رخ ندهد و در عوض ارورها در زبان کامپایل گرفته شوند. این یعنی اینکه کاربران ارورهای خیلی کمتری مشاهده می‌کنند که این یک مزیت خیلی بزرگ است.

    کامپایلر Elm زبان‌های CSS، HTML و جاوا اسکریپت را هدف قرار می‌دهد. به همان روشی که می‌توانید از زبان Clojure برای نوشتن برنامه‌های اجرا شونده روی جاوا استفاده کنید، می‌توانید همچنین برنامه‌هایی بنویسید که از کتابخانه‌های جاوا اسکریپت در Elm استفاده کنند.

    یک تفاوت اصلی بین Elm و دیگر زبان‌های این لیست،‌این است که هیچ‌کدام از توابع اصلی ()filter()، map و دیگر توابع مشابه این‌ها را در آن نمی‌یابید. در عوض،‌این توابع با استفاده از نوع داده مانند map یا Dict.map تعریف می‌شوند.
  5. Haskell

Haskell

 Haskell یکی دیگر از زبان‌های تابعی خالص نوع استاتیک است. بر خلاف Elm، زبان Haskell مدت بیشتری است که وارد میدان کارزار شده است. اولین ورژن این زبان در سال ۱۹۹۰ طراحی شد. آخرین استاندارد آن Haskell 2010 است، در حالی که ورژن بعدی آن قرار است در سال ۲۰۲۰ منتشر شود.

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

اگرچه این زبان زیاد محبوب نشده است، اما Haskell در پروژه‌های خیلی عظیمی کاربرد داشته است. Xmonad window manager کاملاً با زبان Haskell نوشته شده است. Pandoc که نوع‌های مختلف علامت‌گذاری‌ها را به فرمت‌های دیگر و برعکس تبدیل می‌کند نیز از این زبان استفاده می‌کند.

توابع استاندارد ()map()، filter()، reduce و دیگر توابع مرتبه بالا نیز در آن وجود دارند که یعنی می‌توانید از مفاهیم زبان‌های جاوا یا پایتون نیز در Haskell استفاده کنید.

آیا جدیداً وارد عرصه برنامه‌نویسی شده‌اید؟

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

منبع: makeuseof

 مطالب مرتبط

بررسی برنامه‌نویسی تابعی 
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 در جلسه قبلی بررسی شد. این مبحث که ...

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

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

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