متى تكون ترابطات المشغل مهمة؟
-
21-12-2019 - |
سؤال
تحتوي معظم لغات البرمجة على جدول الأسبقية والترابط للمشغلين الثنائيين.الترابط مهم في بعض الحالات، على سبيل المثال. (a - b) - c
!= a - (b - c)
.
ومع ذلك، بالنسبة للمشغل النقابي مثل &&
قد يبدو الأمر غير مهم، لكن معظم اللغات تدرج هذا على أنه ترابطي أيسر.
هل هناك أي حالات يوجد فيها فرق بالفعل بين (a && b) && c
و a && (b && c)
?
المحلول
لا أستطيع أن أصدق أن هناك الكثير من الإجابات الخاطئة (المحذوفة) ...ربما يجب أن أجيب على هذا.
أولاً، الأسبقية != الترابط != ترتيب التقييم.
والآن بعد أن انتهينا من ذلك:الارتباط مهم في بعض الحالات.
ل a + b + c
, ، يهم متى a
, b
, ، و c
هي أرقام فاصلة عائمة بدلاً من الأعداد الصحيحة، لأن أخطاء التقريب ستتراكم بشكل مختلف اعتمادًا على كيفية تجميع المصطلحات.
بالنسبة للحالة الخاصة &&
و ||
, ، لا يهم طالما أنها ليست مثقلة (وهو أمر ممكن فقط في C++، وليس C)، ولكن اللغة لا تزال تحدد واحدًا فقط من أجل الاتساق - وبالتالي يكون التمثيل "الشجرة" للكود (استنادًا إلى القواعد) فريدًا.وهذا يعمل أيضًا لصالح C++ منذ الآن معنى التحميل الزائد &&
و ||
ليست غامضة.
نصائح أخرى
إضافة إلى إجابة @Mehrdads@ (التي قمت بالتصويت عليها):
إذا قمت بإنشاء محلل في أي وقت مضى، ستلاحظ أن المشغلين لديك يجب أن يكون لديهم ارتباط، وإلا
a && b && c
سيكون مجرد خطأ في بناء الجملة.على افتراض أن ما ورد أعلاه لا ينبغي أن يكون خطأ في بناء الجملة، يجب عليك أن تقرر ما إذا كان ينبغي أن يعني:
(a && b) && c
أو
a && (b && c)
لا يمكنك أن تقول فقط:لا أهتم.