سؤال

ربما يكون هذا سؤالًا سخيفًا، لكن الفضول تغلب علي.لقد رأيت مؤخرًا رمزًا يبدو أنه "يعكس" ترتيب التعبيرات الخاصة بالعوامل العلائقية، على سبيل المثال:

if (0 == someVariable)

على عكس ما أراه/أكتبه عادةً:

if (someVariable == 0)

بالنسبة لي، تبدو الطريقة الثانية أكثر قابلية للقراءة وبديهية، لذلك أتساءل عما إذا كان هناك سبب يجعلني أرى الطريقة الأولى؟منطقيًا، يتم تقييم كلا العبارتين بنفس النتيجة، فهل الأمر مجرد مسألة تفضيل شخصي لكيفية كتابتهما؟

هل كانت مفيدة؟

المحلول

أنا أفهم أن هذا هو التفضيل الشخصي.على الرغم من أنه من خلال وضع المتغير في المرتبة الثانية، يمكنك التأكد من عدم تعيين الثابت عن طريق الخطأ للمتغير الذي كان يستخدم لمطوري لغة C.ربما هذا هو السبب وراء رؤيتك لذلك في لغة C# عندما يقوم المطورون بتبديل اللغة.

نصائح أخرى

لا يهم النظام ، ومع ذلك ، فإن الأول يعني أنه الصفر الذي تحققه.الاتفاقية تملي استخدام hte الأخير.

السبب الرئيسي في C وC++ هو سهولة الكتابة

if (someVariable = 0) {
    ...
}

الذي يفشل دائمًا ويحدد أيضًا someVariable إلى 0.

أنا شخصياً أفضّل النمط المتغير أولاً لأنه يقرأ بشكل طبيعي أكثر، وآمل ألا أنسى استخدامه == لا =.

سيصدر العديد من مترجمي C وC++ تحذيرًا إذا قمت بتعيين ثابت داخل ملف if.تتجنب Java وC# هذه المشكلة عن طريق منع التعبيرات غير المنطقية if شروط.تتجنب بايثون هذه المشكلة عن طريق جعل التعيينات بيانًا وليس تعبيرًا.

توجد الطريقة الأولى كطريقة لتذكير نفسك بعدم القيام بمهام في عبارة IF، والتي قد تكون لها عواقب وخيمة في بعض اللغات (C/C++).في C#، لن تتعرض للعض من هذا إلا إذا كنت تقوم بتعيين القيم المنطقية.

رمز C القاتل المحتمل:

if (succeeded = TRUE)
{
    // I could be in trouble here if 'succeeded' was FALSE
}

في C/C++، يكون أي متغير عرضة لمشكلة VAR = CONSTANT عندما تقصد VAR == CONSTANT.لذلك، غالبًا ما يكون من المعتاد إعادة ترتيب عبارة IF الخاصة بك لتلقي خطأ في الترجمة إذا قمت بإفساد هذا الأمر:

if (TRUE = succeeded)
{
    // This will fail to compile, and I'll fix my mistake
}

في C#، تكون القيم المنطقية فقط عرضة لذلك، حيث أن التعبيرات المنطقية فقط هي الصالحة في عبارة if.

if (myInteger = 9)
{
    // this will fail to compile
}

لذلك، في عالم C#، ليس من الضروري اعتماد نمط CONSTANT == VAR، إلا إذا كنت مرتاحًا للقيام بذلك.

بالإضافة إلى المساواة، غالبًا ما أصادف رمزًا مثل

if (0 > number)

أو

if (NULL != pointer)

حيث لا يوجد أي خطر لارتكاب خطأ في C/C++!إنها واحدة من تلك المواقف التي تحولت فيها تقنية التدريس حسنة النية إلى عادة سيئة.

التنسيق الأخير هو بقايا من بناء جملة C، حيث، إذا تركت إحدى علامات التساوي عن غير قصد، فقد قامت بمهمة، بدلاً من المقارنة.

ومع ذلك، لا يمكنك بالطبع تعيين قيمة حرفية رقمية، لذلك إذا كتبتها مثل المثال الثاني، فسوف تحصل على خطأ في المترجم، وليس خطأ.

ومع ذلك، في لغة C#، لا يمكنك القيام بذلك عن غير قصد، لذلك لا يهم حقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top