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

بهترین روش یادگیری پایتون در سال 2025 + دلایل محبوبیت، روش‌های یادگیری و فرصت‌های شغلی

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

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

راه دیگر برای سازماندهی زبان های تابعی، بر اساس موجودیت های پلتفرمی است که مورد هدف قرار می‌دهید. طراحی ماژولار (Modular design) بهره وری را افزایش می دهد. ماژول های کوچک را می توان به سرعت کدگذاری کرد و شانس بیشتری برای استفاده مجدد دارند که مطمئناً منجربه توسعه سریع تر برنامه ها می شود. جدا از آن، ماژول ها را می توان به طور جداگانه آزمایش کرد که به شما کمک می کند زمان صرف شده برای تست واحد و اشکال زدایی را کاهش دهید. ایده کلی کار تبدیل یک مجموعه مفروض به یک مجموعه جدید است. یکی دیگر از مسائلی که می‌توان از این ایده استفاده کرد، مسئله به‌روزرسانی لیست است که در آن می‌خواهیم صرفاً مقادیر یک مجموعه مفروض را با قدر مطلق‌شان به‌روزرسانی کنیم.

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

ساختار تو در توی سطوح فضا نام باعث می‌شود که بدون نیاز به import ماژول خاصی در هر جای برنامه به توابع آماده (Built-in) دسترسی داشته باشیم. تابع (Function) به بلاکی از دستورات گفته می‌شود که برای به اجرا درآمدن نیازمند فراخوانی هستند و این فراخوانی می‌تواند بیش از یک بار انجام گیرد. تابع می‌تواند به هنگام فراخوانی مقادیری را دریافت کند و در صورت لزوم مقداری نیز به عنوان نتیجه برگرداند. عزیزان دقت نمایند که بنده بخاطر صرفه جویی در فضا، بدنه توابع را در اعلان تابع قرار داده ام که این هم سبکی از برنامه نویسی C++ می باشد و شما می توانید مانند قبل تعریف توابع را جداگانه بیان کنید . عمل فوق را سربارگذاری توابع گویند یعنی توابعی که دارای نام مشابه هستند ولی در تعداد آرگمانها و ترتیب ورودی آنها با یکدیگر تفاوت دارند. وقتی در تابع main در سطر 11 تابع func صدا زده می شود، کامپایلر با توجه به آرگومانهای آن متوجه می شود که از کدام یک از سربارگذاری تابع استفاده نماید .

توابع ناخالص را نمی توان به صورت مجزا مورد استفاده قرار داد یا آزمایش کرد چون این توابع وابسته هستند. داده های تغییر ناپذیر (Immutable Data)  داده‌های تغییرناپذیر به این معناست که شما باید به راحتی بتوانید به جای اصلاح ساختارهایی که از قبل وجود دارد، ساختارهای داده ای ایجاد کنید. اگر شما این مطلب را خواندید و به این فکر کردید که " مگر همه زبان‌ها برای نوشتن کد از توابع استفاده نمی‌کنند؟ " این خوب است. حا هر کجای برنامه که نیاز داریم، باید power() را نوشته و دو مقدار ورودی آن را تعریف کنیم. برای درک بهتر، فرض کنید تابع power(x ,y) را در زبان PHP به صورت زیر تعریف می‌کنیم تا عدد x را به توان y رسانده و به عنوان خروجی به ما بدهد. اگر تابعی بنویسیم که تعداد تکرار یک کلمه در متن ما را محاسبه کند، قطعاً آن تابع خروجی خواهد داشت.

تقریباً اکثر زبان‌های برنامه‌نویسی و همه زبان‌های پر کاربرد، مفهوم تابع را درون خود دارند. فقط ممکن است نحوه نوشتن آن (syntax آن) در زبان‌های مختلف متفاوت باشد. در برخی زبان‌ها به جای تابع (function) از کلماتی چون متد (method)، زیر روال (ساب‌روتین –sub-routine) یا رویه (پروسیژر – procedure) استفاده می‌شود. اساساً، این مفهوم ویژگی ها (properties) را به اشیاء اضافه می کند. به عنوان مثال، اگر هارد دیسک یک شی باشد، ظرفیت ذخیره سازی و اندازه دیسک را می توان به عنوان ویژگی اضافه کرد. اما دقت کنید که ما ورودی خود را در طی این فرایند تغییر می‌دهیم.

در برنامه‌نویسی شئ‌گرا برای ذخیره کردن داده شما از خصوصیات یک شئ استفاده می‌کنید و برای استفاده از آن‌ها متدها و تابع‌های متفاوتی را تعریف می کنید. در برنامه‌نویسی تابعی این موضوع ساده‌تر و ما تنها چیزی که مشاهده می‌کنیم تغییرات مربوط به داده است. داده‌ها در این شکل در اشیاء ذخیره نمی‌شوند بلکه تنها با ساخت داده‌ای جدید همراه هستند و همچنین میزان بسیار زیادی تابع در چنین این شیوه از برنامه‌نویسی استفاده می‌شود. با اجرای برنامه بالا کامپایلر از سطر 6 برنامه را آغاز می کند. در سطر 8 متغیری از نوع int بنام x را تعریف کردیم پس در حافظه محلی بنام x با مقدار اولیه 10 ذخیره می شود.

در کلوژر استفاده از defn برای تعریف کردن تابع‌ها امری رایج است؛ اما این کلیدواژه تنها یک جایگزین برای (def foo (fn ...)) است. می‌بینیم که تابعی به نام sum داریم که یک بردار از مقادیر عددی دریافت می‌کند. Recur بارها به loop بازمی‌گردد تا زمانی که یک بردار خالی به دست آید. در هر بار تکرار این مقدار به تجمیع کننده total اضافه می‌شود. بسیاری از ما برنامه‌نویسی را از ابتدا با مفاهیم برنامه‌نویسی شیءگرا آموخته‌ایم؛ اما بهتر است با مفهوم پیچیدگی سیستم نیز آشنا باشیم.

داناپ از سال 1396 تا به امروز سهم بزرگی در حوزه آموزش در کشور داشته و رضایت دانشجویان را از ابتدا ملاک کار خود قرار داده است. در واقع ما با بهره‌گیری از رویه بازگشتی متغیر خود را تغییرناپذیر حفظ می‌کنیم. اگر دقت کنید متوجه می‌شوید که ما از Rduce برای پیاده‌سازی این تابع استفاده کرده‌ایم. این موضوع را در بخش تابع‌های درجه بالاتر بیشتر توضیح خواهیم داد. با ارائه پارامترهای ثابت، تابع محض همواره نتیجه یکسانی بازمی‌گرداند و دیگر لازم نیست که به موقعیت‌هایی فکر کنیم که پارامترهای یکسان نتایج متفاوتی بازمی‌گردانند، زیرا چنین موقعیت‌هایی هرگز پیش نخواهند آمد.

فرض کنید مجموعه‌ای وجود دارد که می‌خواهیم عناصرش را بر اساس یک خصوصیت فیلتر کنیم. تابع فیلتر یک مقدار true یا flase دریافت می‌کند تا تعیین کند که عنصر باید یا نباید در مجموعه حاصل گنجانده شود. اساساً اگر عبارت callback به صورت true باشد، تابع فیلتر آن عنصر را در مجموعه حاصل می‌گنجاند. یک مثال ساده از این حالت زمانی است که مجموعه‌ای از اعداد صحیح داریم و می‌خواهیم تنها اعداد زوج را فیلتر کنیم. ساخت حالت‌هایی برای یک شیء نیز بسیار متداول است تصور کنید رشته‌ای دارید و می‌خواهیم این رشته را به صورت یک url slug درآورید.

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

با فراخوانی هر تابع یک فضانام محلی برای آن تابع، درون فضانام ماژول مربوطه ایجاد می‌گردد و با پایان اجرای تابع نیز از بین می‌رود، در مورد کلاس‌ها هم اتفاق مشابهی رخ می‌دهد. رویکرد این آموزش به تابع بر اساس برنامه‌نویسی اعلانی است. زبان پایتون قابلیت برنامه‌نویسی تابعی را نیز در کنار رویکردهای دیگر همچون اعلانی یا شی‌گرایی ارایه می‌دهد. برای چگونگی برنامه‌نویسی تابعی با استفاده از زبان پایتون می‌توانید به کتاب Functional Programming in Python از انتشارات O'Reilly مراجعه نمایید (Functional Programming in Python). برای استفاده از یک تابع در برنامه نویسی در مرحله اول باید تابع خود را تعریف نماییم تا مشخص کنیم که چه کاری را باید انجام دهد. در شکل بالا ساختار اصلی تعریف یک تابع در برنامه نویسی C++ را مشاهده می کنید .

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

چندتا از لغات هم دائماً در کنار معادل انگلیسی‌شون تکرار شدن تا به یادگیری کمک کنن. شرح تابع بسیار گسترده است و نمی‌تواند تنها محدود به همین درس باشد، بنابراین دروس سیزدهم و چهاردهم نیز برخی از کاربردهای تابع در پایتون را بررسی خواهند کرد. هر تابعی که عملکرد آن بر مبنای تولید اعداد تصادفی است یک تابع محض نیست. سپس، دستورات دیگر در بدنه تابع به صورت پیوسته اجرا می شوند. در برنامه زیر دو عدد با هم جمع می شوند که این کار در تابع add() انجام می شود و نتیجه در main نمایش داده می شود. سپس کنترل برنامه به () main برمی گردد و کدهای ادامه ی ()  function_name  را اجرا می کند.

خوب همانطور که ملاحظه می کنید تابعی را بنام initializefunction که دارای یک آرگومان از نوع int است ومقداری از نوع int را هم برمی گرداند را در سطر 4 از برنامه بالا اعلان کردیم. به آرگومان تابع دقت نمایید که مقدار اولیه 50 را دریافت می کند. کامپایلر اجرای برنامه را از تابع main شروع می کند و در خط بعدی به تابع print برمی خورد که فراخوانی شده است لذا در اینجا از تابع main خارج شده و وارد تابع print می شود. انواع ورودی و خروجی و نامشان را چک کرده و در صورت نبود خطا دستورات را انجام داده تا به انتهای تابع می رسد. در اینجا کامپایلر باز به تابع main برمیگردد و ادامه دستورات را اجرا می کند و در نهایت برنامه خاتمه میابد . وقتی خطوط برنامه ما زیاد می شود درک، پیگیری، خطایابی و دیگر اعمال بر روی برنامه دشوار خواهد شد.

تعریف تابع در خارج از تابع main صورت می گیرد و هیچ تابعی را نمی توان در درون تابع دیگری تعریف نمود . در این روش نیز از یک مجموعه داده ثابت استفاده می‌شود اما فرایند پردازشی در این حالت بسیار متفاوت است. وجود چندین متد برای Array در جاوااسکریپت به ما این قابلیت را می‌دهد تا به صورت مستقیم از برنامه‌نویسی تابعی استفاده کنیم. توابع و داده‌های تغییر‌ناپذیر تنها دو چیزی هستند که شما نیاز دارید در برنامه‌نویسی تابعی با آن‌ها سروکار داشته باشید. در کتاب جدید، من اصول برنامه نویسی تابعی را به شما آموزش می‌دهم تا تمام دانش اساسی که نیاز دارید در مصاحبه شغلی بعدی خود و یا در پروژه بعدی خود به کار ببرید را داشته باشید. یاد گرفتن برنامه نویسی تابعی باعث شد که من یک توسعه‌دهنده بسیار بهتر نسبت به قبل شوم و باعث پیشرفت 10 برابری من شد.

مشابه آن چه در تصویر می‌بینید، ما به توابع به شکل یک جعبه (یا قطعه کد) نگاه می‌کنیم که برای ما کارهایی را انجام می‌دهند. این سه زبان به اندازه لیست قبلی موقعیت شغلی ندارند، اما هنوز فرصت های شغلی زیادی وجود دارد. این لیست از ساده ترین به سخت ترین بر اساس (آغاز کار با هر یک از این زبان‌ها) مرتب شده است. Pure function تابعی است که ورودی‌های آن به عنوان ورودی تعریف می‌شود و هیچ‌کدام از آنها نباید مخفی باشند. داده‌های تغییرناپذیر به این معنی است که شما به راحتی بتوانید ساختارهای داده‌ای ایجاد کنید به‌ جای اینکه ساختارهایی که از قبل وجود دارد را اصلاح کنید. با استفاده از reduce می‌توانیم یک تابع بسازیم که مجموع کل (amount sum) را مدیریت کرده و آن را به صورت یک آرگومان به تابع reduce ارسال کند.

تابع درجه یک (First-class function)  “First-class function” تعریف موجودیت های زبان برنامه نویسی است که هیچ محدودیتی در استفاده از آنها وجود ندارد. بنابراین، توابع درجه اول می توانند در هر نقطه از برنامه ظاهر شوند. بعد از آن من به طور خلاصه به عملکرد برنامه‌نویسی تابعی می‌پردازم تا شما را ترغیب کند که با دقت در مورد داده‌ها و توابع که با هم تعامل دارند فکر کنید. یعنی، این به ما این امکان را می‌دهد که توابع کوچک و مستقل ایجاد کنیم که می‌تواند در ترکیب با یکدیگر برای ایجاد منطق پیچیده به طور فزاینده‌ای ترکیب شود. ما می‌توانیم هر مساله پیچیده‌ای را به زیر مشکلات کوچک‌تر تقسیم کنیم، آن‌ها را با استفاده از توابع حل کنیم، و در نهایت آن‌ها را با هم ترکیب می‌کنیم تا مساله بزرگ‌تر را حل کنیم. زمانی که ما در مورد یک پارادایم برنامه‌نویسی مانند برنامه‌نویسی تابعی یاد می‌گیریم اغلب مفید است که چگونگی عملکرد "رفتار و داده‌های" آن پارادایم را بدانیم.

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

ترکیب تابع (Function Composition)  ترکیب تابع به معنی ترکیب کردن 2 یا چند تابع برای ساخت یک تابع جدید است. در زمان تست کردن برنامه، خروجی شما تنها براساس مقادیری خواهد بود که در پروسه اجرا به برنامه‌ داده‌اید. این نوع تعریف فقط یک نمونه است و همان‌طور که چندین بار متذکر شدم، syntax تعریف تابع در هر زبانی متفاوت است. در حالت عادی، وقتی می‌گوییم تابع add(x ,y) دو ورودی دارد، این دو ورودی به صورت اجباری تعریف شده‌اند. یعنی اگر تابع را به صورت add(5) صدا بزنیم، با خطا مواجه خواهیم شد. Closure یک تابع درونی است که می تواند به متغیرهای تابع والد دسترسی داشته باشد، حتی پس از اجرای تابع والد.

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

با این وجود، همیشه نمی‌توانند این کار را برای کتابخانه‌های از پیش کامپایل شده انجام دهند. این کتابخانه‌ها عموماً این‌گونه اطلاعات را در معرض نمایش نمی‌گذارند، بنابراین بهینه‌سازی‌هایی که شامل اینگونه توابع است را غیرممکن می‌سازند. برخی از کامپایلرها، مانند جی‌سی‌سی، کلمات کلیدی دیگری را برای برنامه‌نویس فراهم کرده‌اند تا توابع خارجی را به صورت سره علامت‌گذاری کنند. فورترن ۹۵ همچنین اجازه می‌دهد توابع به‌صورت سره تعریف شوند. [۱۴] در C++11 کلمهٔ کلیدی constexpr با معانی مشابه اضافه شده است.

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

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

ما کاری که تابع‌مان می‌خواهد انجام دهد را دقیقاً مشخص می‌کنیم، روی مجموعه تکرار می‌کنیم و آیتم کنونی مجموعه را با x مقایسه کرده و اگر شرایط مورد نظر را داشته باشد، آن عنصر را به resultArray ارسال می‌کنیم. اینک تابع f را داریم و می‌توانیم از آن برای پردازش a و b استفاده کنیم. بدین ترتیب تابع‌های + و – را برای ترکیب با تابع double-operator ارسال می‌کنیم و رفتار جدیدی را ایجاد می‌کنیم. کل ایده به صورت رفتار با تابع‌ها به عنوان مقدار و ارسال تابع‌ها مانند داده است. بدین ترتیب می‌توان تابع‌های مختلف را برای ایجاد تابع‌های جدید با رفتار تازه ترکیب کرد. ایده تابع به عنوان یک موجودیت درجه اول این است که با تابع‌ها به عنوان مقدار رفتار کنیم و از آن‌ها به عنوان داده استفاده کنیم.

توابع ابزاری هستند که به ما در بهبود برنامه کمک می کنند و برنامه نویسی ساخت یافته را ارائه می دهند، بدین معنا که برنامه اصلی به قسمتهای منطقی و مستقل کوچکتری تقسیم می شود که توابع نام دارند . یک تابع خالص تابعی است که ورودی های آن به عنوان ورودی (inputs) اعلام می شوند و هیچ کدام از این ورودی ها نباید پنهان شوند. علاوه بر این، توابع خالص خروجی مشابهی را برای پارامترهای داده شده ارائه می دهند. برای اینکه معادله‌ها ساده‌تر شده و لایه‌های پیچیدگی کمتری داشته باشیم Stateها از برنامه‌نویسی تابعی حذف می‌شوند. دو راه کلی برای برنامه‌نویسی وجود دارد – Imperatively و Declarative.

اگر ترجیح می‌دهید با راهنمایی مستقیم یاد بگیرید، شرکت در کلاس‌های حضوری یا کارگاه‌های آموزشی می‌تواند انتخاب مناسبی باشد. این کلاس‌ها معمولاً با نظارت مربیان حرفه‌ای برگزار می‌شوند. گاهی اوقات نمی‌توان از بروز عوارض جانبی جلوگیری کرد و البته اشکالی ندارد اما باید برای توابعی که پارامترهای ورودی دارند برنامه‌ریزی کنید و یک خروجی مطمئن تولید کرده و بازگردانید. در اپلیکیشن‌های بزرگ‌تر، می‌توانید با گروه بندی کلاس‌ها و اشیا، قطعه کد خود را طوری بنویسید که خواندن و مدیریت آن آسان باشد. زبانی که برنامه‌نویس رو مجبور به تعیینِ واضح و مشخصِ ساختارِ برنامه‌ش می‌کنه تا برنامه‌ای با پایه‌ی محکم بنویسه.

توابع ناخالص (Impure functions) دقیقاً در مقابل توابع خالص (Pure function) قرار می‌گیرند. توابع ناخالص را نمی توان به صورت مجزا مورد استفاده قرار داد یا آزمایش کرد زیرا وابستگی دارند. توابع مرتبه بالاتر، توابع دیگر را به عنوان آرگومان می گیرند یا آنها را به عنوان نتیجه برمی گردانند. این تکنیک یک تابع را در یک زمان به آرگومان های خود اعمال می کند، زیرا هر برنامه یک تابع جدید را برمی گرداند که آرگومان بعدی را می پذیرد. در این روش از map برای تبدیل سبد خرید (shopping-cart) به مجموعه‌ای از مقادیر amount استفاده می‌شود و سپس از تابع reduce با تابع + استفاده می‌شود.

زبان‌های اعلانی خاص‌منظوره مانند SQL و Lex / Yacc از برخی عناصر برنامه‌نویسی تابع‌گرا استفاده می‌کنند. همچنین بسیاری از زبان‌های برنامه‌نویسی، برنامه‌‌نویسی به سبک تابع‌گرا را پشتیبانی کرده و یا ویژگی‌های تابع‌گرایی پیاده‌سازی کرده‌اند. مانند C++11 ، کاتلین،[۴] پرل،[۵] پی‌اچ‌پی،[۶] پایتون،[۷] و اسکالا. شروع برنامه نویسی با پایتون یک سفر پربار است که می‌تواند درهای شغلی بسیاری را به روی شما باز کند. این راهنما نقشه راهی را برای شروع یادگیری پایتون به شما ارائه کرده است، از فهم اصول تا تسلط بر مفاهیم پیشرفته و کار بر روی پروژه‌های واقعی.

در بالا می بینیم که سه تابع با نامهای یکسان func را تعریف و صدا زده ایم. درست است که نامها یکسان است اما تعداد آرگومانهای هر تابع با دیگری متفاوت است . بحث حوزه کاری متغیر ها و طول عمر آن در توابع و کلاس ها که در ادامه خواهد آمد بررسی می شود. ما در هر ناحیه ای که متغیر را تعریف می کنیم فقط در آن ناحیه می توانیم از آن متغیر استفاده کنیم و با خروج از آن ناحیه و ورود به ناحیه دیگر یا پایان برنامه، آن متغیر از بین خواهد رفت . تابع دیگری را می بینیم با نام clrscr که این تابع یک توابع از پیش ساخته شده زبان C++ هست و در فایل سرآیند conio قرار دارد و وظیفه آن پاک کردن صفحه نمایش است .

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


برنامه نویسی و هوش مصنوعی