انجمن گروه موج سازان

نسخه‌ی کامل: زبان‌های دستوری
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
زبانهای دستوری (به انگلیسی: Imperative programming) در علوم کامپیوتر به زبانهایی اطلاق می‌شود که در آنها مراحل اجرای یک برنامه کامپیوتری قدم به قدم توسط برنامه نویس بیان می‌شود. این بر خلاف زبانهای اعلانی است که در آنها تنها نتیجه انجام دستورات بیان می‌شود. به بیان دیگر در زبانهای دستوری چگونگی اجرای برنامه بیان می‌شود اما در زبانهای اعلانی چیستی نتیجه بیان می‌شود.

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

منبع
با سلام و عرض خسته نباشید

لطفا اگه امکان داره چند مثال در این باره بزنید و کم توضیح بدهید

مثلا منظور چه زبان های هستند؟

با تشکر از مطالب خوب شما
در زبان های برنامه نویسی دستوری مثل C، C++، BASIC، Java و خیلی زبان های دیگر، تمرکز بر روی انجام دادن یک سری از فعالیتهاست: do A, then do B, etc

در برنامه نویسی دستوری اغلب با داده هایی در حافظه سر و کار داریم که می تونند در خلال یک سری فعالیتها تغییر کنند (mutable data) و رفتار کد در برنامه ممکنه به مقدار جاری تعدادی از داده هامون در حافظه بستگی داشته باشه، چیزی که ممکنه تغییر بکنه با دیگر تکه ی کد در برنامه.

این مثال ساده ای از برنامه نویسی دستوری در کد C هست:

کد:
int i, a[8], v=1;

   for (i=0; i<8; i = i + 1) {
      a[i] = v;
      v = v * 2;
}

کد بالا یک آرایه ی هشت تایی از a که توان های پی در پی از 2 هستند رو تولید می کنه:
(successive powers of 2 (1,2,4,8,16,32,64,128

این کد دستورات زیر رو تولید می کنه:
set the value of v and i to 0
set the ith element of the array a to the current value of v
set the value of v to twice its previous value
set the value of i to one more than its previous value
if the value of i is less than 8, repeat from step 2

توجه داشته باشید که تمرکز شدید روی انجام شدن یک سری از مراحل هست.

در مقابل برنامه نویسی دستوری (imperative programming)، برنامه نویسی تابعی (functional programming) بر تبدیل داده های ورودی به داده های خروجی با تعریف تابعی که این عمل رو انجام میده تمرکز داره. در یک برنامه نویسی تابعی خالص امکان نداره مقدار شئ ای از داده از مقداری به مقدار دیگه تغییر بکنه؛ در حقیقت، شئ ای وجود نداره. تمرکز بر روی نتیجه ی مطلوب هست نه بر روی اینکه چطور این نتیجه گرفته شده.

و این مثالی از برنامه ی تابعی بازگشتی در C:

کد:
int *powers(int *a, int i, int v)
{
   if (i != 8) {
         a[i] = v;
         powers(i+1, v*2);
   }
}

هر درخواست از powers، حافظه ی اضافه تری رو مصرف خواهد کرد. این مثال برای ما خوب کار خواهد کرد وقتی ما به 9 بار صدا زدن محدود باشیم، اما برای تابع بازگشتی بیشتر، بیشتر از فضای Stack ما خواهد بود و این چیز خوبی نیست.
البته توجه داشته باشید مثال بازگشتی C ما هنوز از برنامه نویسی تابعی خالص بهره نمی بره و ما مقدار یک آرایه ی موجود رو تغییر میدیم.