# برمجة أمرية

البرمجة الأمرية في علم الحاسوب، تشير البرمجة الأمرية إلى نمط برمجة يصف عملية الحوسبة من حيث العبارات التي تغير حالة البرنامج. وإلى حد كبير، بالطريقة ذاتها التي تعبّر صيغة الأمر في اللغات الطبيعية عن الأوامر المراد تنفيذها، تحدد البرامج الأمرية تسلسلاتٍ من الأوامر للحاسوب لتنفيذها. ويُستخدم هذا المصطلح على عكس البرمجة التصريحية، التي تعبّر عما ينبغي للبرنامج إنجازه دون وصف كيفية ذلك من حيث تسلسلات الإجراءات المطلوب اتخاذها. وتعتبر برمجة وظيفية وبرمجة منطقية أمثلة لنهج أكثر تصريحية.

## البرمجة الأمرية والإجرائية والتصريحية

البرمجة الإجرائية عبارة عن برمجة أمرية يُبنى فيها البرنامج من واحد أو أكثر من الإجراءات (وتُعرف أيضًا باسم روتينات فرعية أو وظائف). وغالبًا ما تستخدم المصطلحات كمترادفات، لكن استخدام الإجراءات له تأثير كبير على كيفية ظهور البرامج الأمرية وكيفية بنائها. وتُعرف البرمجة الإجرائية للغاية باسم البرمجة الهيكلية، وفيها تكون تغيرات الحالة متمركزة في الإجراءات أو قاصرة على معاملات برمجية صريحة ومردودات من الإجراءات. ومن عقد الستينيات فصاعدًا، تم تعزيز برمجة مهيكلة والبرمجة التركيبية بصفة عامة كأساليب لتحسين القابلية للصيانة والجودة العامة للبرامج الأمرية. وتعتبر برمجة كائنية التوجه امتدادًا لهذا النهج.[بحاجة للاستشهاد[ ويمكن اعتبار البرمجة الإجرائية خطوة نحو البرمجة التصريحية. وبمجرد النظر للأسماء، يمكن للمُبرمج في الغالب ذكر أنواع معامِلات ومردودات الإجراءات (والتعليقات ذات الصلة) وتحديد الإجراء المعين الذي يُفترض تنفيذه – دون النظر بالضرورة إلى كيفية تحقيق الإجراء لهذه النتيجة. وفي الوقت ذاته، ثمة برنامج كامل لا يزال أمريًا نظرًا لأنه «يحدد» العبارات المطلوب تنفيذها وترتيب تنفيذها إلى حد كبير. والبرمجة التصريحية عبارة عن أسلوب برمجة غير أمري تصف فيه البرامج نتائج البرنامج، دون إدراج الأمر صراحةً أو الخطوات التي يتعين القيام بها لتحقيق النتائج. وتتسم لغات البرمجة الوظيفية وبرمجة منطقية بأسلوب البرمجة التصريحية. وفي اللغة الوظيفية الصرفة مثل Haskell، تكون كل الوظائف بدون أضرار، ولا تمثل تغييرات الحالة إلا وظائف تقوم بتحويل الحالة. ورغم أن اللغات الوظيفية الصرفة ليست أمرية، إلا أنها تيسر في الغالب من وصف تأثير إحدى الوظائف كسلسة من الخطوات. وثمة لغات وظيفية أخرى مثل Lisp وOCaml وErlangإرلانج تدعم مزيجًا من البرمجة الإجرائية والوظيفية. وفي لغات البرمجة المنطقية، تتكون البرامج من عبارات منطقية، ويقوم البرنامج بالتنفيذ عن طريق البحث عن براهين للعبارات. وكما في لغات البرمجة الوظيفية، ثمة بعض لغات البرمجة المنطقية مثل Prolog ولغة استعلام قواعد البيانات مثل SQL إس كيو إل، في حيث تكون تصريحية من حيث المبدأ، تدعم أيضًا نمط البرمجة الإجرائي. وقد كانت العديد من لغات البرمجة الأمرية (مثل Fortran فورتران وBASIC بيسيك وCسي (لغة برمجة)) عمليات تجريد للغة التجميع.

## نظرة عامة

يعد تنفيذ المكونات المادية لكل الحواسب تقريبًا تنفيذًا أمريًا؛ [الملاحظة 1] كما روعي في تصميم كل المكونات المادية للحاسوب تقريبًا تنفيذ لغة الآلة التي تمثل لغة الحاسوب الأصلية وتُكتب بالأسلوب الأمري. ومن هذا المنظور منخفض المستوى، تُعرف حالة البرنامج على أنها مكونات الذاكرة، والعبارات هي التعليمات الموجودة في لغة الآلة الأصلية للحاسوب. وتستخدم اللغات الأمرية من المستوى الأعلى متغيرات وعبارات أكثر تعقيدًا، لكنها لا تزل تتبع نفس النمط. وفي حين أن الوصفات والقوائم المرجعية للعمليات ليست من برامج الحاسوب، إلا أنها أيضًا مفاهيم معروفة تشبه في الأسلوب البرمجة الأمرية؛ حيث تمثل كل خطوة أمرًا، وتتحدد الحالة ماديًا. ونظرًا لأن الأفكار الرئيسية للبرمجة الأمرية معروفة نظريًا ومجسدة مباشرة في المكونات المادية للحاسوب؛ لذا تكون معظم لغات الحاسوب بالأسلوب الأمري. وتؤدي عبارات التخصيص، في النمط الأمري، وظيفة على المعلومات الموجودة في الذاكرة وتقوم بحفظ النتائج في الذاكرة لاستخدامها لاحقًا. وبالإضافة لذلك، تسمح اللغات الأمرية عالية المستوى بتقييم التعبيرات المعقدة، التي قد تتألف من مجموعة من العمليات الحسابية حسابيات وتقييمات الدوال وتحويل قيم النتائج إلى الذاكرة. ويسمح ربط العبارات (كما في while loops وdo while loops وfor loops) بتنفيذ تسلسل من العبارات مرات عديدة. ويمكن للحلقات إما تنفيذ العبارات التي تحتوي عليها لعدد محدد من المرات، أو يمكنها تنفيذها بشكل متكرر إلى أن يحدث تغير في بعض الحالات. وتسمح العبارات المتفرعة المشروطة بإنجاز تسلسل من العبارات ليتم تنفيذه فحسب إذا تم استيفاء بعض الشروط. وخلاف ذلك، يتم تخطي العبارات ويستمر تسلسل التنفيذ من العبارات التي تليها. وتسمح العبارات المتفرعة غير المشروطة بنقل تسلسل التنفيذ إلى جزء معين من البرنامج. ويتضمن ذلك القفزة (تُسمى "goto" في عدة لغات) وswitch والبرنامج الفرعي أو الإجراء، طلب (والذي عادة ما يعود للعبارة التالية بعد الطلب).

## هيكل الكتلة

المادة الرئيسية:)برمجة) الكتلة في أوائل تطوير لغات البرمجة عالية المستوى، أتاح تقديم الكتلة بناء البرامج حيث يمكن معالجة مجموعة من العبارات والتصريحات كما لو كانت عبارة واحدة. وقد أتاح ذلك، إلى جانب تقديم الوظائف الفرعية، التعبير عن الهياكل المعقدة من خلال تحلل هرمي إلى هياكل إجرائية أصغر.

## الخلفية التاريخية

كانت أولى لغات الأوامر هي لغات الآلة للحواسب الأصلية. وفي هذه اللغات، كانت التعليمات بسيطة للغاية، مما جعل تنفيذ المكونات المادية للحاسوب أسهل، لكنها أعاقت إنشاء برامج معقدة. وكانت لغة FORTRAN فورتران - التي طورها جون باكوس في شركة آي بي إم بدءًا من عام 1954 - أول لغة برمجة رئيسية للتغلب على العقبات التي شكلتها لغة الآلة في إنشاء برامج معقدة. كما كانت FORTRAN لغة مترجمة أتاحت متغيرات معينة ومصطلحات معقدة وبرامج فرعية والعديد من الخصائص الأخرى المعروفة الآن في اللغات الأمرية. وقد شهد العقدان التاليان تطورًا في عدد من لغات البرمجة الأمرية عالية المستوى الرئيسية الأخرى. وفي أواخر الخمسينيات والستينيات، تم تطوير لغة ALGOL كي تسمح بالتعبير عن الخوارزميات الرياضية بسهولة أكبر، كما قامت بوظيفة اللغة المستهدفة لنظام التشغيل لبعض الحواسب. كما مثلت كلا من لغتيّ COBOL (1960) وBASIC (1964) محاولتين لجعل البرامج اللغوية البرمجية أشبه باللغة الإنجليزية. وفي السبعينيات، تم تطوير لغة البرمجة Pascal باسكال (لغة برمجة)بواسطة نيكولاس ويرث، وقام دينيس ريتشي بإنشاء لغة البرمجة C خلال عمله في مختبرات بل. ثم توصل ويرث إلى تصميم اللغتين Modula-2 وOberon. ولتلبية احتياجات وزارة دفاع الولايات المتحدة، بدأ جون إشبيا وفريق من شركة هانيويل في تصميم لغة البرمجة Ada في عام 1978، بعد مشروع امتد لأربع سنوات لتحديد متطلبات اللغة. وقد تم نشر المواصفات لأول مرة في عام 1983 مع تنقيحات في عام 1995 و2005/2006. وشهد عام 1980 نموًا سريعًا في الاهتمام بالبرمجة كائنية التوجه. كانت تلك اللغات أمرية في الأسلوب، لكنها أضافت مزايا لدعم الكائنات. كما شهد العقدان الآخران من القرن العشرين تطورًا لعدد كبير من لغات البرمجة تلك. لغة البرمجة Smalltalk-80، صاحب فكرتها الأصلية هو آلان كاي في عام 1969، وتم إصدارها في عام 1980 بواسطة مركز أبحاث زيروكس بالو ألتو. واستخلاصًا من المفاهيم في لغة برمجة كائنية التوجه أخرى— Simula (التي تعتبر لغة البرمجة كائنية التوجه الأولى في العالم، والتي جرى تطويرها في أواخر الستينيات) —قام بيارن ستوستروب بتصميم لغة البرمجة C++، وهي من لغات البرمجة كائنية التوجه التي تعتمد على لغة البرمجة C. وقد تم أول تطبيق للغة البرمجة C++سي++ (لغة برمجة) في عام 1985. وفي أواخر الثمانينيات والتسعينيات، كانت اللغات الأمرية الملحوظة التي تعتمد علي المفاهيم كائنية التوجه هي لغة Perl التي صدرت عام 1987 بواسطة لاري وول، ولغة Python التي صدرت عام 1990 بواسطة جايدو فان روسم ولغة PHP بي إتش بي التي صدرت عام 1994 بواسطة راسموس ليدروف؛ وصدرت للغة Java لأول مرة عام 1994 بواسطة شركةصن ميكروسيستمز وصدرت لغة Rubyروبي (لغة برمجة) عام 1995 بواسطة يوكيهيرو «ماتز» ماتسوموتو. ويعد برنامج NET platform (2002)، من شركة مايكروسوفت، في جوهره برنامجًا أمريًا مثلما هي لغاته الأساسية المستهدفة، VB.NET وC#. ويشمل تصنيف: لغات البرمجة الإجرائية لغات برمجة أمرية إضافية.