# عبارة (علم الحاسوب)

في برمجة الكمبيوتر، تعد العبارة (بالإنجليزية: Statement)‏ وحدة نحوية للغة برمجة أمرية تعبر عن بعض الإجراءات التي يتعين تنفيذها. يتم تكوين برنامج مكتوب بهذه اللغة من خلال سلسلة من عبارة واحدة أو أكثر. قد تحتوي العبارة على مكونات داخلية (مثل التعبيرات).
العديد من اللغات الأمرية (مثل C) يميز بين العبارات والتعاريف، مع عبارة تحتوي فقط على كود قابل للتنفيذ وتعريف يمثل معرفًا، بينما يتم تقييم التعبير إلى قيمة فقط. يمكن أيضًا التمييز بين العبارات البسيطة والمركبة؛ قد يحتوي الأخير على عبارات كمكونات.

## أنواع العبارات

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

### عبارات بسيطة

* تأكيد assertion
** في سي: ;assert(ptr != NULL)
* تعيين assignment
** في باسكال A := A + 5
** في سي وفورتان: A = A + 5
* اذهب إلى goto
** في لغة سي وفورتان : ;goto label
* ارجع return
** في لغة سي وفورتان: ;return value
** في باسكال: ;result := value
* استدعاء call
** في سي وفورتان:CLEARSCREEN
** في فورتان:call CLEARSCREEN

### عبارات مركبة

* block الكتلة البرمجية:
** في باسكال: begin ... end
** في لغة سي: { ... }
* حلقة قم ب طالما Do while loop:
;(do { computation(&i); } while (i < 10
* for-loop حلقة لأجل:
for A := 1 to 10 do WRITELN(A) end
* if-statement عبارة اذا:
if A > 3 then WRITELN(A) else WRITELN("NOT YET"); end
* switch-statement عبارة حوّل:
{;switch (c) { case 'a': alert; break; case 'q': quit; break
* with-statement عبارة مع:
(with open(filename) as f: use(f
* while-loop حلقة طالما:
while NOT EOF do begin READLN end

## بناء الجملة (النحو)

مظهر العبارات يشكل شكل البرامج. تتميز لغات البرمجة بنوع العبارات التي تستخدمها (على سبيل المثال عائلة لغة الأقواس المعقوفة curly brace language family). يتم تقديم العديد من العبارات بواسطة معرفات مثل if، while أو repeat. غالبًا ما يتم حجز الكلمات الرئيسية keywords للعبارات بحيث لا يمكن استخدامها كأسماء للمتغيرات أو الوظائف (الدوال). تستخدم اللغات الأمرية عادةً نحواً خاصًا لكل عبارة، والتي تبدو مختلفة تمامًا عن استدعاءات الدوال. من الطرق الشائعة لوصف صياغة الجمل هي صيغة باكوس نور والرسوم البيانية لبناء الجملة ( syntax diagrams).

## دلالات

تختلف الكثير من العبارات دلالياً عن استدعاء روتين فرعي من خلال معالجتها للمعلمات. عادة يتم تقييم معلمة روتين فرعي الفعلي مرة واحدة قبل استدعاء روتين فرعي. هذا يتناقض مع العديد من معلمات العبارة التي يمكن تقييمها عدة مرات (على سبيل المثال حالة حلقة while طالما) أو لا يتم على الإطلاق (على سبيل المثال جسم حلقة loop body حلقة while طالما). تقنياً مثل هذه المعلمات للعبارة هي معلمات الاستدعاء بالاسم . يتم تقييم معلمات عند الحاجة (انظر أيضًا التقييم البطيء). عند توفر معلمات الاستدعاء بالاسم، يمكن تنفيذ عبارة مثل السلوك باستخدام روتين فرعي (انظر Lisp). بالنسبة للغات التي لا تحتوي على معلمات بالاسم، فإن الوصف الدلالي للحلقة أو الوصف الدلالي الشرطي يتجاوز عادةً قدرات اللغة. لذلك، تشير المستندات القياسية غالبًا إلى الأوصاف الدلالية في اللغة الطبيعية.

## التعبيرات

في معظم اللغات، تتعارض العبارات مع التعبيرات (expressions) الموجودة في تلك العبارات التي لا تؤدي إلى نتائج ويتم تنفيذها فقط من أجل آثارها الجانبية، بينما تعيد التعبيرات دائمًا نتيجة ولا تكون لها آثار جانبية على الإطلاق.
فمثلا:
* عبارة
** print('Hello, World.')
* تعبير:
** X=your data
** print (X)
من بين لغات البرمجة الأمرية، تعد Algol 68 واحدة من اللغات القليلة التي يمكن أن تعيد (return) فيها العبارة نتيجة. في اللغات التي تمزج بين الدوال (الوظائف) الأمرية والوظيفية، مثل عائلة Lisp، لا يتم التمييز بين التعبيرات والعبارات: حتى التعبيرات التي يتم تنفيذها في سياقات متسلسلة فقط من أجل آثارها الجانبية والتي لا تُستخدم قيم الإرجاع تُعتبر «تعبيرات». في البرمجة الوظيفية البحتة (purely functional programming)، لا توجد عبارات؛ كل شيء هو تعبير.
كثيرا ما يلاحظ هذا التمييز في الصياغة : يتم تنفيذ عبارة (executed)، طالما يتم تقييم تعبير . يوجد هذا في دوال exec و eval و (execand eval functions) في بعض اللغات: في بايثون توجد على حد سواء، مع exec تطبيقها على بيانات و eval تطبيقها على التعبيرات.العبارة هي تعليمات يمكن لمترجم بايثون تنفيذها. لقد رأينا فقط العبارة المهمة حتى الآن. بعض أنواع العبارات الأخرى التي سنراها بعد قليل هي عبارات طالما while، عبارات لأجل for، عبارة إذا if، عبارة استيراد Import. (هناك أنواع أخرى أيضًا!)
التعبير هو مزيج من القيم والمتغيرات والعوامل واستدعاءات الدوال . التعبيرات تحتاج إلى تقييم . إذا طلبت من بايثون طباعة تعبير، يقوم المفسّر بتقييم التعبير ويعرض النتيجة.

## القابلية للتوسعة

تحتوي معظم اللغات على مجموعة ثابتة من العبارات المحددة بواسطة اللغة، ولكن كانت هناك التجارب بلغات قابلة للتوسيع (extensible languages) تسمح للمبرمج بتعريف عبارات جديدة.