مؤثرا الزيادة والنقص

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

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

مؤثر الزيادة يضيف قيمة واحد (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

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

تصنيف:برمجة
تصنيف:مشغلات (برمجة)