2010-09-01 9 views
7

Checkstyle निम्नलिखित के बारे में शिकायत:क्या ब्रांडेरी ऑपरेटर को हमेशा टर्नरी ऑपरेटर के आसपास रखा जाना चाहिए?

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

है और कहता है कोष्ठक अनावश्यक हैं।

जबकि बयान निश्चित रूप से उनके बिना ठीक काम करता है, यह कहीं अधिक उन्हें वर्तमान के साथ पठनीय लगता है --- अन्यथा के रूप में मैं इसे पढ़ रहा हूँ मैं देख रहा हूँ के लिए करते हैं:

return null 

पहले और उसके बाद के लिए रोकने के लिए है शेष

== a ? a : new A(); 

भाग पर विचार करें, क्योंकि मेरा दिमाग पहले से ही एक पथ से नीचे चला गया है।

इसके अलावा, मैं वही काम करता हूं जब भी मैं एक टर्नरी ऑपरेटर देखता हूं, जब तक कि यह अभिभावकों में समूहित न हो जाए।

तो: क्या टर्नरी के आसपास के माता-पिता वास्तव में मानक होना चाहिए? क्या वहां उन्हें रखने का कोई कारण नहीं है?

+0

मुझे इसे करने के लिए माता-पिता के साथ भी अधिक पठनीय है। मेरे पास var thing = something.prop1.method2() .... जैसे एक उदाहरण था? एक्स: वाई। इसे पढ़ना मैं पहली बार कुछ की उम्मीद कर रहा था .prop1.method2 मेरी var शुरू करने वाली चीज़ होगी। अगर माता-पिता थे ... मैं एक टर्नरी ऑपरेटर का इस्तेमाल होने पर संदिग्ध होता। – user420667

उत्तर

6

खैर, चेकस्टाइल सही है, कोष्ठक निष्पादन के लिए बेकार हैं। लेकिन निष्पादन के लिए बेकार आपके कोड के अच्छे पढ़ने के लिए बेकार नहीं है। यदि आपको पढ़ने के लिए और अधिक समझदारी होती है तो आपको उन्हें छोड़ना चाहिए।

मुझे लगता है कि इस कोड को अधिक कोष्ठकों की जरूरत नहीं है:

int number = (myBoolean)? 1 : 2; 

लेकिन आपके मामले में return कीवर्ड और तथ्य यह है अपने बूलियन अभिव्यक्ति जिस तरह से आप बयान में बदल सकता है।

+0

आप अपने उदाहरण कोड में माता-पिता को 'myBoolean' के आस-पास क्यों डाल रहे हैं? यह वही पैटर्न नहीं है जिसके बारे में पूछा जा रहा है। –

+3

हम, यह एक आदत है ... और, मुझे लगता है कि यह चीजों को स्पष्ट बनाता है। –

+0

मैं इस वाक्यविन्यास को भी पसंद करता हूं। ऐसा लगता है जैसे यह सशर्त पढ़ने और पहचानना आसान बनाता है – sarink

1

दोनों विकल्प सही हैं, अपनी टीम का उपयोग करें या आप क्या काम करते हैं, इसका उपयोग करें यदि आप अकेले काम कर रहे हैं।

आईआईआरसी डिफ़ॉल्ट रूप से चेकस्टाइल सूर्य (आर.आई.पी.) शैली दिशानिर्देशों का उपयोग करता है, इसलिए यदि आप मानक शैली के अनुरूप होना चाहते हैं, तो इसे सुनें और माता-पिता को हटा दें।

2

नहीं, यह वास्तविक तथ्य नहीं होना चाहिए। मैं इसे बिना माता-पिता के पसंद करता हूं।

मुझे लगता है कि उन्हें वहां रखने का एकमात्र कारण मूल्यांकन आदेश को मजबूर करना या भ्रमित रेखा को स्पष्ट करना है।

0

चूंकि आपके प्रश्न के आधार को कोड पढ़ने के कार्य के साथ करना है, इसलिए मैं उस परिप्रेक्ष्य से प्रश्न पूछूंगा।

तथाकथित "गति-पढ़ने" प्रशिक्षण कार्यक्रम के बुनियादी सिद्धांतों की है कि वे पाठक पाने के लिए यह क्रमिक रूप से शब्द-दर-शब्द पढ़ बजाय पाठ की पंक्ति के एक समष्टि विकसित करने के लिए प्रयास करें। आप अपनी पुस्तक से एक पृष्ठ लेने और अपने कोड से वापस कदम उठाने का प्रयास कर सकते हैं - शाब्दिक रूप से यदि आवश्यक हो - पढ़ने के कार्य के इलाज के बजाय पूर्ण रेखा की भावना प्राप्त करने के लिए जैसे कि यह टोकन द्वारा टोकन को पार्स करने का कार्य था।

वैकल्पिक रूप से, आप एक संपादक का उपयोग कर सकते हैं जो आपको शैलियों को कॉन्फ़िगर करने देता है: आप टर्नरी ऑपरेटर को एक अलग रंग बना सकते हैं ताकि यह आपके ऊपर कूद सके। उदाहरण के लिए, नोटपैड ++ में कई अंतर्निहित थीम हैं जो ऐसा करते हैं, जैसा कि कई अन्य संपादक करते हैं।

4

रिटर्न स्टेटमेंट पढ़ने पर, मुझे पता है कि 'वापसी' और ';' के बीच सबकुछ क्या लौटाया जा रहा है, इसलिए कोई भी तरीका नहीं है कि मैं आपके कोड नमूना को रीड नल के रूप में पढ़ सकता हूं क्योंकि कुछ प्रतीकों के बाद आप दावा करते हैं कि आप इसे पढ़ते हैं।

शायद पार्सिंग तकनीकों पर पढ़ना आपको इसे देखने में मदद कर सकता है। उस ने कहा, मैंने वास्तव में पार्सिंग तकनीकों पर पढ़ा नहीं है, हालांकि मैंने पिछले कुछ वर्षों में कुछ पार्सर्स को एक साथ जोड़ दिया है।

मैं हमेशा अनावश्यक कोष्ठक हटा देता हूं। वे कोड समझ में सहायता नहीं करते हैं, क्योंकि मुझे जावा की ऑपरेटर प्राथमिकता बहुत अच्छी तरह से पता है। अजीब समय मैं अनिश्चित हूं, मैं कोष्ठक जोड़ता हूं और यह देखने के लिए प्रतीक्षा करता हूं कि आईडीईए मुझे बताता है कि वे अनावश्यक हैं। फिर मैं उन्हें हटा देता हूं, और जिस प्राथमिकता नियम को मैंने अभी खोजा है उसे याद करने की कोशिश कर रहा हूं।

मुझे प्राप्त कोडबेस में, मुझे कोड के उन क्षेत्रों में अनावश्यक ब्रांड्स की सबसे बड़ी संख्या मिलती है जो अन्य कारणों से खराब हैं, इसलिए मैं दोनों को जोड़ता हूं।

1

सामान्य रूप से, कोई

कोष्ठक त्रिगुट (भी सशर्त रूप में जाना) ऑपरेटरों या उसके वर्गों के आसपास की आवश्यकता नहीं है, क्योंकि उनके पूर्वता परिचालन (सिर्फ तार्किक ऑपरेटरों और ऊपर कार्य के नीचे) के क्रम में तो बहुत कम है। पूर्ण तालिका के लिए नीचे दिए गए लिंक को देखें।

यह तर्क दिया जा सकता है, इसलिए, कि इस तरह के अनावश्यक कोष्ठक नेत्रहीन अव्यवस्था कोड, और वे प्रोग्रामर की ओर से समझ के कमी का पता चलता है।

अपवाद है कि में या ternaries आसपास कोष्ठक के उपयोग की आवश्यकता हो सकती होगा:

  • यदि आपका त्रिगुट काफी जटिल कई पंक्तियों योग्यता है, स्वचालित अर्धविराम सम्मिलन को रोकने के लिए आप अपने कथन को माता-पिता में घेर सकते हैं।

  • यदि आपका टर्नरी किसी अन्य टर्नरी के भीतर घोंसला है।

MDN पर भी देखें:

संबंधित मुद्दे