کانال تلگرام

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

تاریخ : ۱۵ مرداد ۱۳۹۸
نویسنده : امیر حسین نصر
دسته بندی ها : برنامه نویسی

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

functional

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

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

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

با این اوصاف برنامه نویسی تابعی ما را به عقب بازخواهد گرداند، آیا باید این رویکرد را در برنامه نویسی خود در نظر بگیریم؟

همه این رویکردها در برنامه نویسی فقط نوعی الگو (patterns) هستند

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

به عبارت دیگر ما می خواهیم کسی باشد که وقتی ما به زبان انگلیسی صحبت می کنیم، منظورمان را به شخصی که به روسی حرف می زند بفهماند. این شخص در این مثال همان برنامه نویسی و یا به عبارتی دیگر یک زبان برنامه نویسی است. 

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

برنامه نویسی شی گرا، تابعی و حتی رویه ای همه، الگوهای نوشتن کدها در زبان های برنامه نویسی هستند. برخی از زبان های برنامه نویسی به بعضی از رویکردها نزدیک تر هستند، البته این باعث نمی‌شود که از ارزش  رویکرد های دیگر کم شود.
 
الگو ها یا به عبارتی دیگر pattern ها مجموعه خاصی از مشکلات را برای ما حل می‌کنند، در طول زمان کاملاً به این درک رسیده ایم که نمی توان به همه چیز به چشم یک شی نگاه کرد و شاید راه های بهتری برای کد نویسی هم وجود داشته باشد.

درک الگوهای اعلانی

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

Start.
Check initial state of door.
If door is closed, reach out to door handle and turn. 
Remember new state, otherwise continue. 
Walk through doorway. 
Close door. 
End.

در نمونه مثال بالا دستورات باید به ترتیب و کاملاً دقیق اجرا شوند، در غیر این صورت ممکن است با خطا روبرو شوید.

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

قوانین جبر در ریاضی معمولاً نمونه خوبی برای برنامه نویسی اعلانی هستند. به مثال زیر توجه کنید. همانطور که مشاهده می کنید به دو روش متفاوت می‌توان به نتیجه یکسانی دست پیدا کرد :

1 + 2 + 3 + 4 + 5 = 15
2 + 4 + 5 + 3 + 1 = 15

(3 x 5 x 8) + 12 - 5 + (2 x 5) = 137
(5 x 2) - 5 + 12 + (5 x 3 x 8) = 137

روشی دیگر برای درک برنامه نویسی اعلانی به منظور حل یک مسئله خاص تبدیل ورودی های برنامه به خروجی مورد انتظار است ( صرف نظر از اینکه چه پردازشی بر روی داده های ورودی انجام میشود :

Problem: I want to change this creature (input) chicken into a (output) cow.

Apply 4 legs
Lengthen legs
Remove outer coat and replace with white cow hide
Give creature black spots
Increase creature size
Change noise to 'moo'
Modify creature face and replace with cow snout

خداحافظی با state ها

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

let ticketSales = [
   {name:'Twenty One Pilots', isActive: true, tickets:430}, 
   {name:'The Wiggles Reunion', isActive: true, tickets:257},
   {name:'Elton John', isActive: false, tickets:670}
]

/*using imperative*/
let activeConcerts = [];
for (let i = 0; i < ticketSales.length; i++){
    let t = ticketSales[i]; 
    if(t.isActive){ 
    activeConcerts.push(t)
  }
}

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

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

صحبت پایانی

در حالی که ما تلاش خود را کردیم که برنامه نویسی تابعی را برای شما شرح دهیم، اما هنوز موارد زیادی وجود دارد که باید آنها را دنبال کنید، در زمان یادگیری برنامه نویسی تابعی بسیاری از افراد به جای توجه به ایدئولوژی پشت این رویکرد، اغلب به مسائل فنی آن توجه می کنند.

باید بدانید که برنامه نویسی تابعی یک الگو و روش برای نوشتن کد هاست. با استفاده از این روش می توانیم کدهایی بنویسیم که مدیریت آنها در آینده برای ما ساده تر شود. زمانی که بتوانید الگوهای تابعی را به صورت کامل درک کنید می توانید از آن ها در الگوهای شی گرایی هم استفاده کنید. 

#برنامه نویسی تابعی #برنامه نویسی شی گرا

مقالات پیشنهادی

مشاهده همه مقالات
ثبت دیدگاه

برای ارسال دیدگاه لازم است ابتدا وارد سایت شوید