هل يجب وضع الأقواس دائمًا حول المشغل الثلاثية؟

StackOverflow https://stackoverflow.com/questions/3620762

  •  26-09-2019
  •  | 
  •  

سؤال

يشكو CheckStyle ما يلي:

return (null == a ? a : new A());

ويقول البارنس غير ضروري.

على الرغم من أن البيان يعمل بشكل جيد بدونها ، إلا أنه يبدو أكثر قابلية للقراءة معهم --- وإلا عندما أقرأه ، فإنني أميل إلى رؤيته:

return null

أولاً ثم يجب أن تتوقف مؤقتًا للنظر في المتبقية

== a ? a : new A(); 

جزء ، منذ ذهني قد ذهب بالفعل مسار واحد.

علاوة على ذلك ، أميل إلى فعل الشيء نفسه كلما كان أرى مشغلًا ثلاثيًا ، ما لم يتم تجميعه في Parens.

لذلك: هل يجب أن يكون Parens on the Ternary هو المعيار الفعلي؟ هل هناك أي سبب لعدم وضعهم هناك؟

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

المحلول

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

أعتقد أن هذا الرمز لا يحتاج إلى المزيد من الأقواس:

int number = (myBoolean)? 1 : 2;

ولكن في حالتك return الكلمة الرئيسية وحقيقة أن Boolean هو تعبير يمكن أن يغير الطريقة التي تقرأ بها العبارة.

نصائح أخرى

عند قراءة بيان العودة ، أعرف أن كل شيء بين "العودة" و "؛" ؛ هو ما سيتم إرجاعه ، لذلك لا توجد طريقة يمكنني من خلالها قراءة عينة الكود الخاصة بك كإرجاع فارغ تليها بعض الرموز كما تدعي أنك تقرأها.

ربما تساعدك قراءة تقنيات التحليل على رؤيتها كما أفعل. بعد قولي هذا ، لم أقرأ حقًا تقنيات التحليل ، على الرغم من أنني جمعت بعض المحللات معًا على مر السنين.

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

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

لا ، لا ينبغي أن يكون المعيار الفعلي. أنا أفضل ذلك بدون بارينز.

أعتقد أن السبب الوحيد لوضعهم هو إجبار أمر التقييم أو توضيح خط مربك.

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

تستخدم IIRC بشكل افتراضي إرشادات نمط Sun (RIP) ، لذلك إذا كنت ترغب في الامتثال مع النمط القياسي ، والاستماع إليه وإزالة Parens.

على العموم، لا.

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

لذلك يمكن القول أن مثل هذه البارنس غير الضرورية فوضى بصري الكود ، ويكشفون عدم الفهم من جانب المبرمج.

الاستثناءات التي قد تتطلب استخدام البارنس في أو حول Ternaries ستكون:

  • إذا كان الثلاثية الخاصة بك معقدة بما يكفي لاستغناء خطوط متعددة ؛ يمكنك بعد ذلك أن تحيط ببيانك في Parens لمنع إدخال Semicolon التلقائي.

  • إذا كان الثلاثية الخاصة بك متداخلة داخل الثلاثية الأخرى.

انظر أيضا على MDN:

نظرًا لأن أساس سؤالك يتعلق بفعل رمز القراءة ، فسوف أتعامل مع السؤال من هذا المنظور.

أحد المبادئ الأساسية لما يسمى برامج التدريب "قراءة السرعة" هو أنهم يحاولون الحصول على القارئ لتطوير أ الشكل الكلي من خط النص بدلاً من قراءته بالتتابع كلمة كلمة. قد تحاول أخذ صفحة من كتابهم والتراجع عن الكود الخاص بك- حرفيًا إذا لزم الأمر- للحصول على إحساس بالخط الكامل بدلاً من التعامل مع فعل القراءة كما لو كان فعل الرمز المميز.

بدلاً من ذلك ، يمكنك استخدام محرر يتيح لك تكوين الأنماط: يمكنك أن تجعل المشغل الثلاثي لونًا مختلفًا بحيث يقفز عليك. على سبيل المثال ، يحتوي Notepad ++ على عدد من الموضوعات المدمجة التي تفعل ذلك ، وكذلك العديد من المحررين الآخرين.

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