لنبدأ بأبسط عامل، علامة الجمع (+) هي عامل ثنائي - أي أن علامة الجمع تربط رقمين فقط، وليس الرقم الثالث أو أكثر.
ولذلك، يتم التعبير عن "1 زائد 2 زائد 3" في الكمبيوتر على النحو التالي:
(1 + 2) + 3 // aor
1 + (2 + 3) // b على الرغم من أننا نكتبها عادةً بالشكل 1 + 2 + 3، إلا أن هذا لا يعني أنها تعادل 1+2+3 في رياضياتنا.
فهل 1+2+3 في الرياضيات تمثل أ أو ب؟
إذا ترك تقييم الكمبيوتر ارتباطيًا، فإن هذا التعبير يعادل النوع الأول أ؛ وإذا كان ارتباطيًا صحيحًا، فإن هذا التعبير يعادل النوع الثاني ب.
الفهم البسيط لـ 1 + 2 + 3 هو "جمع 1 و 2 و 3 معًا". في الواقع، في الرياضيات التي نتعرض لها، هو جمع ثلاثة أرقام. لكن في لغات البرمجة، الأمر ليس كذلك فحسب.
كما ذكرنا من قبل، فإن الإشارة + لا يمكن أن تعمل مع ثلاثة أرقام أو أكثر، ويمكن أن تشارك فقط في عمليات الجمع مع رقمين.
بالمناسبة، زائد وناقص هما عاملان أحاديان على الرغم من أنهما يستخدمان نفس الرموز مثل عوامل الجمع والطرح الثنائية، إلا أنهما مختلفان، لذلك لا تعتبر أن +4 يعادل 0+4 في الواقع أنهم ليسوا متساوين،
+4 هو عدد صحيح، لكن 0+4 عبارة عن تعبير إضافة، والذي يتم تقييمه بالضبط إلى +4.
في جافا، يمكننا أن نكتب باختصار a = +4، ولكن عندما نكتب باختصار a = 0 + 4 يتم إنشاء تحذير.
وهناك مثال آخر، أيضا عن قصيرة،
قصيرة ب = 1؛
قصير ب = ب + 4؛
short b += 4; // لا يوجد تحذير، فكيف يعمل 1 + 2 + 3؟ في لغة البرمجة الخاصة ببنية فون نيومان، هناك تأثير جانبي - اعتدت أن أسميه "عندما تختلف عملية الحوسبة في الكمبيوتر عن عملية التفكير في دماغ المبرمج، يطلق عليها تأثير جانبي" (على الرغم من أنها لم يتم كتابته بهذه الطريقة في الكتاب) نعم، لكنني كنت أعتقد ذلك دائمًا)، في الأصل كنت تعتقد أن الأمر سيكون هكذا، ولكن اتضح أن الكمبيوتر لا يفعل هذا وأنا أسميه تأثيرًا جانبيًا.
إذا كنت قد قرأت "الأقوال والعبارات" السابقة، فيمكن فهم ذلك على النحو التالي:
1 + 2 هو تعبير قيمته الإرجاعة هي 3. ثم يتم إضافة القيمة المعادة لهذا التعبير إلى تعبير آخر 3 + 3، وتكون النتيجة النهائية هي 6.
نعيد كتابة هذا الكود باستخدام البيان:
// احسب 1 + 2 + 3
فار أ = 1 + 2;
var b = a + 3;إذا قمنا بتقييم هذا التعبير في lisp، فلا توجد آثار جانبية.
(+ (+ 1 2) 3) إذا لم تفهمه بعد، أو كان هذا المثال مميزًا جدًا، فلنغيره إلى مثال آخر.
5 > 4 > 3 في الرياضيات، تكون هذه المعادلة صحيحة. عندما نكتب هذا الكود بلغة C، فإنه يُرجع خطأ بالفعل.
السبب هو نفسه كما هو مذكور أعلاه. علامة أكبر من (>) هي عملية ثنائية ولا يمكن مقارنة ثلاثة أرقام بشكل مباشر. النتيجة التي يتم إرجاعها بواسطة 5 > 4 صحيحة. عند مقارنة true بـ 3، يتم تحويل true إلى 1. وهي 1 > 3، فالنتيجة النهائية خاطئة بطبيعة الحال.
باختصار، نعود إلى وجهة النظر في مقال "العبارات والعبارات": كل تعبير في لغة البرمجة له قيمة.
على الرغم من أن العوامل في لغات البرمجة هي نفس العوامل في الرياضيات، إلا أنها ليست متكافئة. عندما تكتب برنامجًا، اكتبه ليقرأه الناس؛ وعندما تقوم بتصحيح أخطاء برنامج ما، يجب أن تتعلم التفكير في معنى الكود بطريقة الكمبيوتر.
أنا معتاد على فهم العوامل كوظائف، على سبيل المثال، 2 + 5 هي في الواقع إضافة (2، 5) أو 2.add(5). هل سأخبرك سراً: "في الواقع، العديد من اللغات تفعل هذا".