سؤال

نظرا للمصطلحات التالية:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

أيهم تفضل ولماذا؟

نحن نفترض أن مسار التنفيذ الأكثر شيوعًا هو مسار condition كونها كاذبة.

أميل إلى تعلم كيفية استخدام 1)، على الرغم من أنني لست متأكدًا تمامًا من سبب إعجابي به أكثر.

ملحوظة:قد تكون الأمثلة التالية أبسط - وبالتالي ربما أكثر قابلية للقراءة - ولكن ليست كل اللغات توفر مثل هذا التركيب، وهي ليست مناسبة لتوسيع تخصيص المتغير ليشمل أكثر من عبارة واحدة في المستقبل.

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

أفضل الطريقة الثالثة لأنها أكثر إيجازًا ووحدة منطقية.فهو يقوم بتعيين القيمة مرة واحدة فقط، ويمكن نقلها ككتلة، وهي ليست عرضة للخطأ (وهو ما يحدث، خاصة.في الطريقة الأولى إذا تم فصل الإعداد إلى القيمة 1 والتحقق والإعداد الاختياري إلى القيمة 2 بعبارات أخرى)

3) هو أوضح تعبير عما تريد أن يحدث.أعتقد أن جميع القيم الأخرى تتطلب بعض التفكير الإضافي لتحديد القيمة التي ستنتهي في المتغير.

من الناحية العملية، سأستخدم العامل الثلاثي (؟:) إذا كنت أستخدم لغة تدعمه.أفضّل الكتابة بأسلوب وظيفي أو تصريحي على الأسلوب الحتمي كلما استطعت.

أنا أميل إلى استخدام رقم 1 كثيرًا بنفسي. if condition يقرأ أسهل من if !condition, ، خاصة إذا فاتتك "!"، على الأقل في ذهني على الأقل.

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

ملحوظة:قد تكون الأمثلة التالية أبسط — وبالتالي ربما أكثر قابلية للقراءة — ولكن ليست كل اللغات توفر مثل هذا التركيب

هذه ليست حجة لعدم استخدامها في اللغات التي توفر مثل هذا التركيب.وبالمناسبة، يتضمن ذلك جميع اللغات السائدة الحالية بعد آخر إحصاء لي.

ولا تصلح لتوسعة إسناد المتغير ليشمل أكثر من عبارة واحدة في المستقبل.

هذا صحيح.ومع ذلك، غالبًا ما يكون من المؤكد أن مثل هذا التمديد لن يحدث أبدًا لأن condition سوف تسفر دائمًا عن إحدى الحالتين المحتملتين.

في مثل هذه المواقف سأفضل دائمًا متغير التعبير على متغير البيان لأنه يقلل من الفوضى النحوية ويحسن التعبير.وفي حالات أخرى أميل إلى الذهاب مع switch العبارة المذكورة من قبل - إذا كانت اللغة تسمح بهذا الاستخدام.إذا لم يكن الأمر كذلك، الرجوع إلى عام if.

switch البيان يعمل أيضا.إذا كان الأمر بسيطًا ويحتوي على أكثر من خيارين أو ثلاثة خيارات، فهذا هو ما أستخدمه.

في حالة قد لا تحدث فيها الحالة.سأذهب مع 1 أو 2.وإلا فإنه يعتمد فقط على ما أريد أن يفعله الكود.(أي.وأنا أتفق مع كروزر)

أنا أميل إلى استخدام إن لم يكن...العودة.

ولكن هذا إذا كنت تتطلع إلى إرجاع متغير.إن إزالة المستبعدين من الطريق أولاً يميل إلى جعله أكثر قابلية للقراءة.يعتمد الأمر حقًا على سياق البيان وكذلك اللغة.قد يعمل بيان الحالة بشكل أفضل ويكون قابلاً للقراءة في معظم الأوقات، ولكن الأداء يعاني في ظل لغة VB، لذا فإن سلسلة من عبارات if/else تكون أكثر منطقية في هذه الحالة المحددة.

الطريقة 1 أو الطريقة 3 بالنسبة لي.يمكن للطريقة الأولى تجنب الدخول/الخروج للنطاق الإضافي، لكن الطريقة الثالثة تتجنب التعيين الإضافي.سأميل إلى تجنب الطريقة الثانية حيث أحاول إبقاء منطق الشرط بسيطًا قدر الإمكان (في هذه الحالة، !غريبة لأنه يمكن إعادة كتابتها كطريقة 1 بدونها) وينطبق نفس السبب على الطريقة 4.

يعتمد ذلك على الحالة التي أختبرها.

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

لكل شيء آخر سأستخدمه 3)

المنطق NOT يزيد من الارتباك عند قراءة الكود - حسنًا في رأسي، لا أستطيع التحدث نيابة عن أي شخص آخر :-)

إذا كان للمتغير قيمة افتراضية طبيعية فسأختار رقم 1.إذا كانت أي من القيمتين متساويتين (غير) مناسبتين للافتراضي، فسأختار رقم 2.

هذا يعتمد.أنا أحب العوامل الثلاثية، لكن في بعض الأحيان يكون الأمر أكثر وضوحًا إذا استخدمت عبارة "if".أي من البدائل الأربعة التي تختارها يعتمد على السياق، لكنني أميل إلى اختيار أيهما يجعل وظيفة الكود أكثر وضوحًا، وهذا يختلف من حالة إلى أخرى.

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