برنامه‌نویسی چیزی است که از مدت‌ها پیش از شی‌گرایی وجود داشته است و ریشه‌اش به زمان ماشین تورینگ برمی‌گردد. برنامه‌نویسی فانکشنال نیز در طول تاریخ، بسته به زبان برنامه‌نویسی و الگوهای بنیادینی که در جعبه‌ابزار توسعه‌دهندگان پرطرفدار بوده است، بالا و پایین‌هایی را از لحاظ محبوبیت تجربه کرده است. برای مدت زیادی هم تفکر شی‌گرا بر برنامه‌نویسی حاکم بود. تفکر شی‌گرا از اولین چیزهایی است که در رشته‌های علوم کامپیوتر آموزش داده می‌شود و وقتی صحبت از می‌شود، همه از آن صحبت می‌کنند. با رشد به عنوان زبان اصلی در وب، برنامه‌نویسی فانکشنال هم در حال بازگشت است. جاوااسکریپت تا حدی یک زبان غیر وابسته ( Agnostic ) به الگوها است به این معنا که به هیچ سبک کدزنی یا تفکری وابستگی چندانی ندارد. این یکی از دلایلی است که از جاوااسکریپت به عنوان یکی از ساده‌ترین زبان‌های برنامه‌نویسی برای یادگیری یاد می‌شود. شما می‌توانید هر ساختار یا روش تفکری را روی آن پیاده‌سازی کنید و مطیمن باشید که برنامه کار خواهد کرد. همه این‌ها یک سوال را در ذهن من ساخت: فقط الگو هستند. هم‌چنین یک وسیله ارتباطی بین توسعه‌دهندگان در قالب یک زبان مشترک و فراتر از گویش‌های محلی است. کسی که آلمانی صحبت می‌کند، به صورت بالقوه می‌تواند کدی را که توسط فردی در روسیه نوشته شده است بخواند. "الگوها" این فرایند ارتباطی را تسهیل می‌کنند و راهی برای تفکر، طبقه‌بندی و دسته‌بندی همه‌چیز هستند. برنامه‌نویسی شی‌گرا معمولا از همه بیشتر آموزش داده می‌شود و درباره‌اش صحبت می‌کنند. برنامه‌نویسی فانکشنال معمولا در حاشیه قرار می‌گیرد و مورد توجه افراد نیست. برنامه‌نویسی شی‌گرا، فانکشنال و رویه‌ای فقط الگوهای متفاوتی از نوشتن کد هستند. بعضی از زبان‌های برنامه‌نویسی با یک سبک راحت‌تر کار می‌کنند ولی این موضوع بقیه شیوه‌ها را در ابزار برنامه‌نویسی ما کم‌اهمیت‌تر نمی‌کند. الگوها مجموعه مشخصی از مشکلات را حل می‌کنند و در طول زمان، ما به این باور رسیده‌ایم که هر چیزی یک شی نیست و گاهی اوقات راه‌های بهتری برای نوشتن کد وجود دارد. درک الگوهای اعلانی ( Declarative ) دو راه برای برنامه‌نویسی وجود دارد: دستوری ( Imperative ) و اعلانی ( Declarative ) برنامه‌نویسی دستوری بر توصیف تمرکز می‌کند و به طور کلی لیستی از دستورات برای اجرا در کامپیوتر است. در واقع می‌توان گفت مجموعه‌ای از عبارات است که به ترتیب اجرا می‌شوند. شما نمی‌توانید از یک مرحله عبور کنید چرا که بقیه‌ی‌قسمت‌ها را بلااستفاده می‌کند. در مثال بالا، فرایند باید دقیقا به همین ترتیب اجرایی شود وگرنه ممکن است فاجعه‌رخ دهد. برنامه‌نویسی اعلانی کمی منعطف‌تر است چرا که به شیوه‌ای کار می‌کند که به برنامه می‌گوید چه‌کاری باید انجام شود، بدون این‌که مشخص کند برنامه چگونه باید این هدف را محقق کند. برنامه‌نویسی فانکشنال زیرمجموعه‌ای از سبک اعلانی با دستورالعمل‌هایی است که می‌تواند با هر ترتیبی بدون خراب‌شدن برنامه اجرا شود. قوانین جبری مثال خوبی از برنامه‌نویسی اعلانی است به شرطی که قوانین پایه محاسبات حفظ شود. یک راه دیگر برای فهم برنامه‌نویسی اعلانی این است که برنامه نویسی اعلانی برای حل یک مسیله خاص از طریق تبدیل ورودی به یک خروجی مورد انتظار شکل می‌گیرد صرف نظر از این‌که این ورودی ممکن است چه باشد و چگونه پردازش آن ورودی انجام می‌شود. خداحافظی با ذخیره مداوم وضعیت برنامه ( State ) در برنامه‌نویسی فانکشنال جاوااسکریپت، نیازی به ذخیره‌سازی وضعیت برنامه نیست‌و با تمرکز بر ورودی و نحوه پردازش، یک لایه از پیچیدگی آن کاهش می‌یابد. در هنگام تست، نتایج تنها به مقادیر داده‌شده بستگی دارند، نه فرآیند جریان یا حالت برنامه. یک جداشدگی مشخص بین وضعیت‌های برنامه‌وجود دارد. نوعی از کارخانه جزیره‌ای ایزوله‌شده که خروجی‌ها را بر اساس ورودی تولید می‌کند. بیایید تا نگاهی سریع به کد زیر بیندازیم. وقتی از الگوی دستوری استفاده می‌کنیم، یک پروسه مشخص وجود دارد که برنامه باید طی کند تا خروجی دلخواه را به ما بدهد. زبان کد بیشتر از آن‌که بر نمایش چیزی که باید به آن برسد تمرکز داشته باشد، بر توصیف چگونگی کارکرد هر بخش کد تمرکز دارد. برای کار کردن یک "حالت" نیاز است و اگر به هر دلیلی تغییر کند یا از محدوده خارج شود، به احتمال زیاد خروجی ما غلط خواهد بود. هر دوی این مثال‌ها از داده‌مشابهی استفاده ولی به شیوه متفاوتی آن را پردازش کرده است. روش‌های آرایه مختلفی در جاوا اسکریپت وجود دارد که برنامه‌نویسی فانکشنال را ممکن می‌کند ( و در نتیجه پیچیدگی کلی کد را کاهش می‌دهد. سخن آخر با این‌که این مطالب کلیات برنامه‌نویسی فانکشنال را پوشش می‌دهد، اما راهنمای قطعی و نهایی نیست. هنگام یادگیری برنامه‌نویسی فانکشنال، اکثر برنامه‌نویس‌ها از همان اول درگیر مباحث فنی می‌شوند به جای آ‌ن‌که به فلسفه آن توجه کنند. برنامه‌نویسی فانکشنال، الگو و روشی برای نوشتن کدی است که به روال مجموعه‌ای متصل نباشد به طوری که با پاک‌شدن چیزی باعث بروز خطا شود. وقتی برنامه‌نویسی فانکشنال به درستی درک شود، الگوهای آن می‌تواند درون الگوهای شی‌گرا هم اجرا شوند. مباحث زیاد دیگری هم درباره برنامه‌نویس فانکشنال است که بد نیست درباره آن‌ها بدانید. چیزهایی مثل immutability ، observation ، first - class entities ، higher order function ، filter ، map و reduce در نهایت، هر چیزی در برنامه‌نویسی یک الگو است. گسترش دانش خود به بیش از یک الگو دست شما را هنگام حل مسایل به صورت موثرتر و مفیدتری بازتر می‌کند. ترجمه از: مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید یا کویرا را دنبال کنید.