با این پنج زبان برنامه‎نویسی تابعی آشنا شوید

   
نام نویسنده:
 دوشنبه 23 اردیبهشت 98 ساعت: 15:00:00

اگر مدتی را در اینترنت صرف خواندن درمورد زبان‌های برنامه‎نویسی کرده باشید حتماً درمورد برنامه نویسی تابعی چیزهایی شنیده‌اید. اما این کلمه چه معنی می‎دهد؟ حتی اگر بدانید که برنامه نویسی کاربردی چیست شاید ندانید که بهترین زبان‌های برنامه نویسی آن کدام‌ها هستند. درحالی که شما می‎توانید نمونه‌ی برنامه نویسی تابعی را در هر زبانی ببینید اما استفاده از آن در بعضی از آن‎ها راحت‎تر است.

 

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

اگر پیش زمینه‎ای در ریاضی داشته باشید درمورد برنامه نویسی تابعی چیزهایی شنیده‎اید. به این دلیل که برنامه نویسی تابعی شبیه به توابع ریاضی عمل می‎کند اما اگر از ریاضیات چیزی ندانید این موضوع می‎تواند شما را گیج کند. 

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

 

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

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

 

1- جاوا اسکریپت 

 

بعضی از زبان‎های برنامه نویسی امکان برنامه نویسی تابعی را فراهم می‎کنند اما بعضی دیگر آن را اعمال می‎کنند. جاوا اسکریپت در دسته‎ی اول جای می‎گیرد. درحالی که شما می‎توانید از نمونه‎های برنامه نویسی تابعی در این زبان استفاده کنید اما می‎توانید همین کار را با برنامه نویسی شیء گرا نیز انجام دهید. 

نمونه‎های زیادی از برنامه نویسی تابعی در جاوا اسکریپت ، مثل توابع با مرتبه بالاتر وجود دارد. جاوا اسکریپت توابع زیادی دارد که با آرایه‎هایی مثل map(), reduce(), filter() و غیره استفاده می‎کنند که همه توابع با مرتبه بالاتر هستند. این قابلیت به شما اجازه می‎دد تا همه را به هم متصل کرده با آرایه‎ها انواع کارها را انجام دهید. 

درحالی که جاوا اسکریپت با تغییرپذیری سازگار نیست اما نسخه‎های جدید استاندارد ECMAScript مشکل را حل کرده‎ است. به جای کلمه کلیدی var برای مشخص کردن متغییرها شما باید از const و let استفاده کنید. با اولی می‎توانید تابت‌ها را مشخص کنید و با let محدوده‎ی متغیر را به تابع محدود کنید. 

 

2- پایتون 

 

مانند جاوا اسکریپت، پایتون یک زبان عمومی است که شما توسط آن می‎توانید نمونه‎های برنامه نویسی مختلفی را اجرا کنید. شاید پایتون نقاط ضعف خود را داشته باشد اما برنامه نویسی تابعی یکی از آن‎ها نیست. برای شروع می‎توانید map(), filter(), reduce() و بسیاری از توابع مشابه را ببینید. مانند جاوا اسکریپت، این‎ها توابع مرتبه بالاتر هستند. در پایتون برنامه نویسی تابعی یک مزیت دارد و آن کلمه کلیدی lambda است. 

شما می‎توانید از lambda به چند روش استفاده کنید. یکی از این روش‎ها استفاده از آن به عنوان میانبر برای توابع ساده است. وقتی که یک متغیر وارد می‎کنید می‎توانید از اصطلاحات lambda به عنوان یک تابع پایتون استاندارد استفاده کنید. مزیت اصلی اصطلاحات lambda زمانی است که از آن‎ به عنوان توابع ناشناس استفاده می‎کنید.

توابع ناشناس در جاوا اسکریپت و دیگر زبان‎های لیست کار می‎کنند و زمانی بیشتر کاربردی می‎شوند که با توابع مرتبه بالاتر مورد استفاده قرار گیرند. بدون توابع ناشناس شما باید حتی توابع ساده را نیز از قبل تعریف کنید. 

 

3- Clojure

 

برخلاف جاوا اسکریپت و پایتون،Clojure شاید خیلی حتی بین برنامه نویسان هم نام شناخته شده‎ای نباشد. Clojure نوعی گویش از زبان برنامه نویسی Lisp است که تاریخ آن به 1950 بازمی‎گردد. عملکرد خاص این زبان با وظایف مختلف آن را به زبانی ایده‎آل برای برنامه نویسی تابعی تبدیل کرده است. 

مانند دیگر گوشی‎ههای Lisp، Clojure با کد مانند داده رفتار می‏کند. به این معنی که کد می‎تواند خودش را تغییر دهد. برخلاف دیگر لهجه‎های Lisp، Clojure روی پلتفرم جاوا اجرا می‎شود و در بایت‎کد JVM کامپایل شده است درنتیجه می‎تواند با کتابخانه‎های جاوا کار کند. 

برخلاف دیگر زبان‎های این لیست Clojure به طور کلی یک زبان برنامه نویسی تابعی است، به این معنی که تا حد امکان  به خصوص در ساختار داده از عدم تغییرپذیری پیروی می‎کند. Clojure انتظار ندارد که همه‎ی برنامه‎ها از نظر ریاضی قابل اثبات باشند اما تا حد امکان از توابع خالص استفاده می‎کند. 

 

4- Elm

 

یکی از جدیدترین زبان‎ها در این لیست Elm است. این زبان که به طور خالص یک زبان تابعی است در ابتدا توسط اوان چاپلیکی در سال 2012 ساخته شد. این زبان در بین توسعه دهندگان وب به خصوص کسانی که رابط کاربری می‎سازند محبوب است. 

برخلاف موارد قبلی در این لیست Elm از آزمون پویا استفاده می‎کند. درنتیجه هیچ استثنائی برای زمان اجرا وجود ندارد و خطاها در زمان کامپیال شناسایی می‎شوند، درنتیجه کاربر خطاهای کمتری می‎بیند. 

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

یک تفاوت عمده بین Elm و دیگر زبان‎ها این است که توابعی مثل filter(), map() و چیزهای مشابه را نمی‎یابید. درعوض بر اساس انواع داده مثل List.map یا Dict.map تعریف می‎شود.

 

5- Haskell

 

Haskell یک زبان تابعی خالص دیگر است. برخلاف Elm، Haskell ‎زبانی نسبتاً قدیمی است. اولین نسخه‎ی این زبان در سال 1990 طراحی شد. جدیدترین استاندارد آن Haskell 2010 است و نسخه‎ی بعدی در سال 2020 منتشر خواهد شد. 

طبیعت کاملاً تابعی Haskell به این معنی است که با طراحی، توابع دچار اثرات جانبی می‎شوند. این موضوع باعث می‎شود که به راحتی بتوان با وجود ریشه‎ی عمیق برنامه نویسی تابعی در دنیای آکادمیک مشکلات را در دنیای واقعی نیز حل کرد. 

با این که Haskell خیلی در بین مردم محبوب نیست اما در بین بعضی از پروژه‎های بسیار بزرگ مورد استفاده قرار گرفته است. ویندوز منیجر Xmonad به طور کامل در Haskell نوشته شده است. Pandoc که انواع مختلف نشانه گذاری را از دیگر زبان‎ها تغییر می‎دهد نیز از این زبان استفاده می‎کند. 

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

 

بیشتر بخوانید:

چگونه فایل‎های hosts را روی لینوکس اصلاح و مدیریت کنیم؟

آموزش SQL؛ بخش ششم- دستور Delete برای حذف رکوردهای جداول

 

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

 

 

منبع: makeuseof

اخبار مرتبط

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

ارسال نظر


شخصی سازی Close
شما در این صفحه قادر به شخصی سازی نمیباشید