سؤال

ولقد رأيت هذا حولها، ولكن لم يسمع تفسيرا واضحا لماذا ... هذا هو حقا لأي لغة، وليس فقط C # أو VB.NET أو بيرل أو أيا كان.

عند المقارنة بين اثنين من العناصر، وأحيانا يتم وضع القيمة "تحقق" على الجانب الأيسر بدلا من الحق. منطقيا بالنسبة لي، كنت قائمة لديك متغير أولا ثم القيمة التي كنت مقارنة. ولكن رأيت عكس ذلك، حيث "ثابت" يتم سرد أولا.

وماذا (إن وجدت) مكسب هناك إلى هذا الأسلوب؟

وذلك بدلا من:

if (myValue > 0)

ورأيت:

if (0 < myValue)

أو

if (Object.GimmeAnotherObject() != null)

ويتم استبدال:

if (null != Object.GimmeAnotherObject())

وأي أفكار حول هذا؟

وTIA! كيفن

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

المحلول

وبعض المطورين وضع ثابت على اليسار مثل ذلك

if(0 = myValue)

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

if(0 == myValue)

وهذا يمنع الكثير من التصحيح مؤلمة على الطريق، منذ كتابة

if(myValue = 0)

وهو قانوني تماما، ولكن على الأرجح يعني لك

if(myValue == 0)

والخيار الأول هو ليس ما تريد. فإنه سيتم تغيير بمهارة البرنامج ويسبب كل أنواع الصداع. نأمل أن يوضح!

نصائح أخرى

وأنا لا أعتقد أن قاعدة بسيطة مثل ولكن الثابت أولا أو ولكن ثابت آخر ليست خيارا ذكيا جدا. وأعتقد أن الاختيار ينبغي أن يعبر عن ذلك دلالات. على سبيل المثال أنا أفضل أن استخدام كلا الإصدارين في الاختيار النطاق.

if ((low <= value) && (value <= high))
{
    DoStuff(value);
}

ولكن أوافق على الأمثلة التي ذكرتها - وأود لكن ثابت آخر، ويمكن أن لا نرى أي سبب obviouse لفعل ذلك بطريقة أخرى

if (object != null)
{
    DoStuff(object);
}

في C ++ هذين صحيحة وتجميع

if(x == 1)

و

if(x=1)

ولكن إذا كنت أكتب مثل هذا

if(1==x)

و

if(1=x)

وبعد ذلك الاحالة إلى 1 يتم اكتشاف وسوف رمز لا ترجمة.

وانها تعتبر "أكثر أمانا" لوضع المتغير CONST على الجانب الأيسر.

وعندما تحصل في العادة من وضع متغير CONST على اليسار لاحالة أنها تميل إلى أن تصبح الوضع الافتراضي للتشغيل، لهذا السبب كنت أنظر إليها تظهر في الشيكات المساواة فضلا

لصافي، انها لا صلة لها بالموضوع، وسوف المترجم لا تسمح لك جعل مهمة في حالة مثل:

if(x=1)

ولأن (كما قال الجميع) انها ممارسة سيئة (لأنه من السهل أن تفوت).

وعندما لم يكن لديك ما يدعو للقلق حول ذلك، انها قليلا أكثر قابلية للقراءة للوضع المتغير الأول والقيمة الثانية، ولكن هذا هو الفرق الوحيد - لا بد من تقييم كلا الجانبين

عن ممارسة الترميز للقبض على الأخطاء المطبعية مثل '! =' كتبته باسم '=' على سبيل المثال.

إذا كان لديك ثابت على اليسار كل عوامل التعيين سيتم القبض عليهم من قبل مترجم لأنك لا يمكن تعيين إلى ثابت.

والعديد من اللغات (على وجه التحديد C) تسمح الكثير من المرونة في كتابة التعليمات البرمجية. في حين، ثابت على اليسار يبدو غير عادي بالنسبة لك، يمكنك أيضا مهام البرنامج والشرطية معا،

if (var1 = (var2 & var3)) { /* do something */ }

وهذا الرمز سوف تحصل على نتيجة منطقية إلى var1 وأيضا / * تفعل شيئا * / إذا كانت النتيجة صحيحة.

ومن الممارسات ذات الصلة الترميز هو تجنب كتابة التعليمات البرمجية التي تكون فيها التعابير الشرطية مهام داخلها. على الرغم من أن لغة البرمجة تسمح مثل هذه الأمور. كنت لا تأتي عبر هذه المدونة كثيرا منذ المهام ضمن الشرطية غير عادية كود نموذجية بحيث لا يكون مثل هذه الأمور.

وهناك لغة C المادة الممارسات الترميز جيدة في DeveloperWorks IBM موقع ربما كان هذا هو ما زال صالحا للناس الكتابة بتلك اللغة.

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