اگر مدتی را در اینترنت صرف خواندن درمورد زبانهای برنامهنویسی کرده باشید حتماً درمورد برنامه نویسی تابعی چیزهایی شنیدهاید. اما این کلمه چه معنی میدهد؟ حتی اگر بدانید که برنامه نویسی کاربردی چیست شاید ندانید که بهترین زبانهای برنامه نویسی آن کدامها هستند. درحالی که شما میتوانید نمونهی برنامه نویسی تابعی را در هر زبانی ببینید اما استفاده از آن در بعضی از آنها راحتتر است.
برنامه نویسی تابعی چیست؟
اگر پیش زمینهای در ریاضی داشته باشید درمورد برنامه نویسی تابعی چیزهایی شنیدهاید. به این دلیل که برنامه نویسی تابعی شبیه به توابع ریاضی عمل میکند اما اگر از ریاضیات چیزی ندانید این موضوع میتواند شما را گیج کند.
به طور ساده، برنامه نویسی تابعی با توابع و داده مانند غیرمتغیرها رفتار میکند. شما داده را به یک تابع میدهید و تابع آن را به نوعی دیگر از داده تغییر میدهد. در برنامه نویسی تابعی، تابع وضعیت برنامه و یا داده را تغییر نمیدهد. در اینجا شباهتی به فلسفه یونیکس وجود دارد که هر برنامه باید یک کار را به درستی انجام دهد. یک تابع نباید بخشهای زیادی از برنامه را دستکاری کند، درعوض باید ورودی را دریافت کرده و به شما خروجی بدهد. به صورت ایدهآل توابع باید در برنامه نویسی تابعی خالص باشند به این معنی که هر ورودی که به آن داده شود خروجی یکسان خواهد بود.
برنامه نویسی شیء گرا در مقابل تابعی
در برنامه نویسی شیء گرا شما معمولاً یک شیء پایه با چند روش اختصاصی برای تغییر داده و یا وضعیت شیء وجود دارد و یا حتی ممکن است داده و یا وضعیت را تغییر دهند. در برنامه نویسی کاربردی اینکار جوابگوست. این نوع میتواند دسترسی به برنامهها را دشوارتر کنند زیرا همیشه مشخص نیست چه چیزی وضعیت یا داده را تغییر میدهد. برنامه نویسی تابعی بیشتر در محیطهای آکادمیک کاربرد دارد اما میتواند چنین مشکلاتی را حل کند.
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
ثبت نظر