برنامهنویسی تابعی
From Wikipedia, the free encyclopedia
در علوم کامپیوتر، برنامهنویسی تابعی (به انگلیسی: Functional programming) یک رویکرد برنامهنویسی است که در آن برنامهها توسط محاسبه و ترکیب توابع ساخته میشوند. برنامهنویسی تابعی یک رویکرد برنامهنویسی اعلانی است که در آن تعریف توابع درختهایی از عبارتها هستند که هر کدام از این عبارات به جای یک توالی از عبارات دستوری که وضعیت برنامه را تغییر میدهند؛ صرفاً یک مقدار برمیگردانند.
در برنامهنویسی تابعی، توابع به عنوان شهروندان درجه یک تلقی میشوند، این بدان معنی است که توابع را میتوان به نامها (از جمله شناسههای محلی) مقید کرده، به عنوان آرگومان ارسال کرده و یا از توابع دیگر بازگرداند. دقیقاً مانند هر نوع داده دیگر. این ویژگی این امکان را فراهم میکند که برنامهها به شکل اعلانی و ترکیبپذیر نوشته شوند، بهطوری که که توابع کوچک به صورت پودمانی با هم ترکیب میشوند.
برنامهنویسی تابعی گاهی به عنوان مترادفی برای برنامهنویسی تابعی محض در نظر گرفته میشود. این نوع برنامهنویسی زیرمجموعهای از برنامهنویسی تابعی است که در آن تمام توابع به عنوان توابع ریاضی و قطعی یا تابع سره تلقی میشوند. هنگامی که یک تابع سره با مجموعهٔ آرگومانهای ثابت فراخونی میشود، همیشه همان نتیجه را برمیگرداند و نمی تواند تحت تأثیر هیچگونه حالت قابل تغییر یا اثر جانبی دیگری باشد. این برخلاف توابع غیرسره است که معمولاً در برنامهنویسی دستوری استفاده میشود و میتواند اثرات جانبی داشته باشد (مانند تغییر وضعیت برنامه یا گرفتن ورودی از یک کاربر). طرفداران برنامهنویسی تابعی محض ادعا میکنند که با محدود کردن اثر جانبی، برنامهها اشکالات کمتری داشته؛ همچنین اشکالزدایی و تست نرمافزار آسانتر میشود. از سوی دیگر استفاده از این رویکرد برای دستیابی به درستییابی صوری نرمافزار مناسبتر است. [1] [2]
منشأ برنامهنویسی تابعی ریشه در تحقیقات دانشگاهی دارد و از حساب لامبدا تکامل پیدا کرده است. حساب لاندا یک سیستم صوری محاسبات است که صرفاً مبتنی بر توابع میباشد. برنامهنویسی تابعی به شکل تاریخی کمتر از برنامهنویسی دستوری محبوب بوده است. با این حال بسیاری از زبانهای تابعگرا امروزه در صنعت و آموزش دیده میشوند. از جمله لیسپ معمولی، اسکیم، کلوژر ، زبان برنامهنویسی ولفرام، [3] راکت ، ارلنگ، اوکمل، هسکل، و F#. برنامهنویسی تابعگرا همچنین برای برخی از زبانهای خاصمنظوره موفق نقش کلیدی ایفا میکند. مانند R در آمار، J ، K و Q در آنالیز مالی، و XQuery / XSLT برای XML. زبانهای اعلانی خاصمنظوره مانند SQL و Lex / Yacc از برخی عناصر برنامهنویسی تابعگرا استفاده میکنند. مانند ممنوع کردن مقادیر قابل تغییر. همچنین بسیاری از زبانهای برنامهنویسی، برنامهنویسی به سبک تابعگرا را پشتیبانی کرده و یا ویژگیهای تابعگرایی پیادهسازی کردهاند. مانند C++11 ، کاتلین،[4] پرل،[5] پیاچپی،[6] پایتون،[7] و اسکالا.