PDA

مشاهده نسخه کامل : تفاوت procedural در مقابل functional در مقابل imperative در چیست؟



Shervan360
29-11-19, 23:10
با سلام

امکان داره تفاوت این سه سبک برنامه نویسی رو با مثالی شرح بدید؟ چند تا سرچ کردم اصلا نفهمیدم. فقط شی گرایی رو خوب فهمیدم.

مثلا جاوا و سی شارپ شی گرا هستند.

زبان C کدام دسته زیر هست؟ اسمبلی و زبان ماشین چطور؟ یا ...

Procedural Programming

Functional Programming

Imperative Programming
ممنون :11():

ravegoat
11-12-19, 00:07
با سلام،

دوست عزیز ببخشید با تاخیر جواب میدم...

کلا تقسیم بندی سبک های برنامه نویسی بستگی به زاویه ی دید داره و همین موضوع شاید کمی گیج کننده باشه.

از یه زاویه ی دید زبان های برنامه نویسی رو میشه به دو دسته ی زبان های دستوری (Imperative) و به زبان های اعلانی (Declarative) تقسیم کرد. سبک های شی گرا و یا رویه ای (Procedural) جز دسته ی زبان های دستوری هستن و سبک های تابعی (Functional) و یا منظقی (Logic) جز دسته ی زبان های اعلانی هستند. (منبع (Only the registered members can see the link))

در زبان دستوری ما روند اجرای برنامه رو مرحله به مرحله شرح میدیم ولی در زبان های اعلانی فقط میگیم چی میخواییم. مثلا در حالت دستوری اگر بنده و دوستم به یه کافه بریم، دنبال یه میز خالی میگیردیم که حداقل دو صندلی داشته باشه، به سمت میز مورد نظر حرکت می کنیم و روی صندلی ها می نشینیم. ولی در حالت اعلانی تنها از متصدی کافه درخواست می کنیم که یه میز دو نفره برای ما فراهم کنه. (منبع (Only the registered members can see the link))

یه زبان هم می تونه دستوری باشه و هم اعلانی مثل سی شارپ:
حالت دستوری


List<int> collection = new List<int> { 1, 2, 3, 4, 5 };
List<int> results = new List<int>();
foreach(var num in collection)
{
if (num % 2 != 0)
results.Add(num);
}

حالت اعلانی


List<int> collection = new List<int> { 1, 2, 3, 4, 5 };
var results = collection.Where( num => num % 2 != 0);

هر دو کد بالا نتیجه ی یکسانی دارن ولی به دو سبک مختلف نوشته شدن. در حالت اول مرحله به مرحله تا استخراج اعداد پیش رفتیم ولی در حالت دوم فقط یه عبارت LINQ به کار بردیم. (منبع (Only the registered members can see the link))
این که کدوم حالت بهتره بستگی به کاربرد داره. مثلا برای برنامه نویسی موازی سبک تابعی مناسب تره چون طبق تعریف تابع خالص نباید اثر جانبی داشته باشه. اگر یه زبان برنامه نویسی از چندین سبک پشتیبانی کنه، هیچ چیز شما رو منع نمی کنه که از ترکیبی از سبک ها استفاده کنید.

تقسیم بندی زبان ها بین سبک های که شما فرمودید همیشه مطلق نیست ولی غالبا سی، اسمبلی و زبان ماشین رو جز سبک Imperative و زیر دسته ی Procedural قلمداد می کنن. (منبع (Only the registered members can see the link))

شاد باشید
آرمین :11():