تفاوت بین برنامهنویسی تابعی و شئگرا
دو مورد از پارادایمهای برنامهنویسی که توسعهدهندگان ایجاد کردهاند و برنامههای خود را مطابق با آنها مینویسند، شامل برنامهنویسی تابعی و شئگرا هستند. به احتمال زیاد قبلا اسم آنها را شنیدهاید، اما ما در این مطلب قصد داریم به صورت دقیق بگوییم که آنها چه هستند و چه تفاوتهایی با هم دارند.
برنامهنویسی شئگرا چیست ؟
برنامهنویسی شئگرا از نمونههای پارادایمهای برنامهنویسی است که در آن هرچیزی به عنوان اشیا در نظر گرفته میشود. این شئها میتوانند ساختارهای دادهای متفاوتی باشند. این اشیاء هر کدام دادههایی را نگهداری میکنند که این محل نگهداری به خصوصیات آنها مربوط میشود. این خصوصیات از طرف توابع و یا متدهایی که به شئ داده میشود، پیادهسازی میشوند.
برای مثال شئ Person تمامی موارد مربوط به یک فرد را در برنامه نشان میدهد که در این صورت خصوصیات شئ ما حاوی مواردی مانند: وزن، قد، رنگ پوست، رنگ مو، نام، سن و… میشود. همانطور که گفته شد اینها مواردی هستند که به خصوصیات شئ مرتبط میشوند اما این شئ ما میتواند کارهایی نیز انجام دهد، برای مثال چیزی را بلند کند، صحبت کند، بخوابد و یا کارهای دیگر. این موارد از طریق تابعها و متدها انجام میشود که با دادههای یک شئ کار میکنند.
متخصصانی که از این روش برنامهنویسی استفاده میکنند همواره میگویند که چنین کاری باعث میشود فرایند ساخت سناریوهای مرتبط به دنیای واقعی سادهتر شود. این پارادایم به شما اجازه میدهد که بهتر به نیازمندیهای مشتریتان برسید.
برخی از زبانهایی که از این شیوه پیروی میکنند عبارت هستند از سیپلاسپلاس، جاوا، پایتون، سیشارپ، سویفت و… .
برنامهنویسی تابعی چیست ؟
برنامهنویسی تابعی شیوهای از برنامهنویسی است که سعی دارد از تغییر دادن وضعیت و دادههای تغییرپذیر اجتناب کند. در یک برنامه تابعی شما همواره خروجی یکسانی با چیزی که وارد توابع کردهاید دارید.
این موضوع بدان دلیل است که خروجیهای یک تابع کاملا مبتنی بر ورودیهای آن تابع است، و هیچ جادوی عجیبی در پشت صحنه وجود ندارد. این روش به عنوان حذف تاثیرات جانبی نیز شناخته شده است.
برای مثال اگر شما تابعی مانند getSum() را برای جمع دو عدد فراخوانی کنید، چنین خروجی را به شما میدهد، وقتی همین کار را با اعدادی مشابه x و y نیز انجام دهید، کار به همان صورت قبلی انجام خواهد شد.
این کار اجازه میدهد که کارایی یک برنامه قابل پیشبینی باشد. هر تابع کوچکی تنها یک بخش از کار را انجام میدهد و این موضوع همواره به همین شکل است. این شیوه از برنامهنویسی به شما اجازه میدهد تا همه کارها را به صورتی سادهتر و ماژولار بدون پیچیدگی زیاد انجام دهید و همه چیز را مطابق با یک هارمونی در کنار هم بگذارید. این کار همچنین روند تست کردن و رفع مشکل را نیز برای شما سادهتر میکند.
برخی از زبانهایی که از این شیوه پیروی میکنند عبارت هستند از لیسپ، Clojure و F#.
مشکلات برنامهنویسی شئگرا
برخی مشکلات همراه با برنامهنویسی شئگرا وجود دارد. این روند به این شکل معروف است که شما نمی توانید استفاده مجدد از آن بکنید. به این دلیل که برخی از توابع مبتنی بر کلاسی هستند که در آن قرار دارند و برخی وقتها کار با یک تابع که در یک کلاس دیگر قرار دارد سخت است.
همچنین این شیوه از برنامهنویسی کارایی کمتری دارد و کار کردن با آن بسیار پیچیده است. بسیاری از اوقات برای ساختارهای بزرگ از این روش استفاده شده و این موضوع برای درک بسیار سخت بوده است.
مشکلات برنامهنویسی تابعی
برنامهنویسی تابعی نیز بدون مشکل نیست. کار کردن به شیوه برنامهنویسی تابعی واقعا طول می کشد و ذهنیت مربوط به خود را میطلبد. فکر کردن به شیوه برنامهنویسی شئگرا سادهتر است به این دلیل که همه چیز مانند جهان واقعی است و ما بدین شکل با آن برخورد میکنیم. برنامهنویسی تابعی در کل به معنی دستکاری و بکاربردن دادهها است. تبدیل کردن یک سناریو در دنیایی واقعی به حالتی در برنامهنویسی تابعی واقعا نیازمند فکر زیاد و تلاش بسیار است.
براساس این مشکل برای یادگیری، تعداد کمی از افراد از چنین استایل برنامهنویسی استفاده میکنند و این موضوع باعث میشوند که پیدا کردن همکارانی که بدین شکل کار می کنند سخت باشد و منابع یادگیری برای چنین زمینهای نیز کم باشد.
مقایسه برنامهنویسی تابعی و شئگرا
هدف هر دوی این استایلها این است که برنامهای عاری از باگ همراه با توسعه سریع و درکپذیری بالا تحویل دهند. هر دوی این شیوهها، دارای متدهای متفاوتی برای ذخیرهسازی و کار با داده هستند. در برنامهنویسی شئگرا برای ذخیره کردن داده شما از خصوصیات یک شئ استفاده میکنید و برای استفاده از آنها متدها و تابعهای متفاوتی را تعریف می کنید. در برنامهنویسی تابعی این موضوع سادهتر و ما تنها چیزی که مشاهده میکنیم تغییرات مربوط به داده است. دادهها در این شکل در اشیاء ذخیره نمیشوند بلکه تنها با ساخت دادهای جدید همراه هستند و همچنین میزان بسیار زیادی تابع در چنین این شیوه از برنامهنویسی استفاده میشود.
امیدوارم که توانسته باشم درکی واضح از اینکه هر مورد از این پارادایمها چه هستند و تفاوت آنها با یکدیگر چیست داده باشم. میتوان به صورت جداگانه و یا به صورت ترکیبی از هر دوی این پارادایمها بسته به نوع نیازتان استفاده کرد. در نهایت برای اینکه تصمیم بگیرید کدام مورد میتواند برای شما مناسبتر باشد، مزایا و معایب هر دو را مطالعه کنید.
- ۹۶/۱۲/۲۶