مشغل الزيادة والنقص

مشغل الزيادة والنقص  هو مشغل برمجي أحادي يقوم بعملية الجمع أو الطرح إلى ومن المعامل الخاص به، وعادة ما يكون مزروع داخل لغات البرمجة الأمرية. كما تحتوي لغات البرمجة الشبيهة بلغة سي نسختين لكل مشغل (قبل وبعد) باختلاف دلالي بسيط جداً.

في لغات البرمجة المشتقة من الناحية التركيبة من لغة البرمجة بي (بما في ذلك لغة سي ومشتقاتها العديدة)، فإن مشغل الجمع يكتب على شكل ++ بينما مشغل الطرح يكتب على شكل --.

مشغل الزيادة يضيف قيمة واحد (1) إلى قيمة معامله، والمعامل يجب أن تكون بيناته حسابية أو مؤشرة، وتقود إلي كائن قابل التعديل، وبالمثل فإن مشغل النقص ينقص من قيمة معامله بمقدار واحد (1). تزداد قيم المؤشرات (أو تنقص) بمقدار يجعلها تشير إلى العنصر المجاور التالي (أو السابق) في الذاكرة.

في بعض لغات البرمجة التي تحتوي علي نسختين من كل مشغل (قبل وبعد)، فإن مشغل قبل الزيادة يضيف واحد إلي معامله وبالتالي فإن قيمة التعبير هي قيمة الزيادة، أما في حالة مشغل بعد الزيادة فإن المشغل يضيف واحد إلى معامله وبالتالي فإن قيمة التعبيير هي قيمة المعامل ذاته قبل عملية الإضافة.

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

نتيجة هذا التعبير x - ++x دائماً تساوي الصفر، عند محاولة فهم هذا التعبير نجد أن أولوية تنفيذ مشغل الزيادة أعلى من أولوية تنفيذ عملية الطرح، لذلك سوف يقوم مشغل الزيادة بإضافة واحد لقيمة (x)، وبما أننا نقوم بطرح قيمتين من نفس النوع ولهم نفس المسمى فإن أي تغيير حدث في قيمة (x) بسبب مشغل الزيادة سوف يؤثر على القيمة الأولى التي في هذا التعبير ألا وهي (x) أيضاً، ولذلك هذا التعبير يشبة تماما كأننا نقوم بطرح قيمتين متساويتين، لذلك الناتج سوف يكون صفر دائماً.

مثال 
المثال التالي يوضح الفرق بين معامل الزيادة ومعامل النقصان في لغة سي.
 int x;
 int y;
 
 // معامل الزيادة
 x = 1;
 y = ++x;  // x أصبحت 2، y أصبحت أيضاً 2
 y = x++;  // x أصبحت 3، y تساوي 2
 
 // معامل النقصان
 x = 3;
 y = x--;  // x أصبحت الآن 2، y تساوي 3
 y = --x;  // x أصبحت 1، y تساوي 1

مراجع

انظر أيضًا 
 مؤشر (برمجة)
 لغات برمجة

برمجة
مشغلات (برمجة)