2010-05-12 17 views
5

मैं जावा में निम्नलिखित if -statement लिखा है:if-statement में सशर्त ऑपरेटर?

if(methodName.equals("set" + this.name) || 
    isBoolean() ? methodName.equals("is" + this.name) : 
        methodName.equals("get" + this.name)) { 
    ... 
} 

इस if में इस तरह के भाव लिखने के लिए, हालत से राज्य को अलग करने के एक अच्छा अभ्यास है? और क्या यह अभिव्यक्ति सरल हो सकती है?

+0

क्या आप मौजूदा जावबीन मैपिंग टूल्स से अवगत हैं? ** बहुत कुछ ** :) – BalusC

+0

मेरे पास योगदान करने के लिए विशेष रूप से पर्याप्त कुछ भी नहीं है, लेकिन यहां तक ​​कि जो कोई टर्नरी ऑपरेटर से प्यार करता है, मुझे यह भी ध्यान रखना चाहिए कि कुछ लोग दृढ़ता से मानते हैं कि इसे बहुत ही कम इस्तेमाल किया जाना चाहिए। वे लोग शायद आपके उपयोग को पीओ-पोह करेंगे। –

+0

@ बालससी: मेरी जावाबीन गतिविधि का शानदार अनुमान। मैं सिर्फ शौक और व्यक्तिगत उपयोग के लिए इसे लागू कर रहा हूं, प्रत्येक सेटटर में बस 'super.property (newValue)' द्वारा बीन्स के अंदर वाक्यविन्यास की सफाई कर रहा हूं। ;-) लेकिन मुझे उनके बारे में पता है, उल्लेख करने के लिए धन्यवाद। – Pindatjuh

उत्तर

8

मैं

if (methodName.equals("set" + this.name) 
|| methodName.equals((isBoolean() ? "is" : "get") + this.name)) { 
    ... 
} 
+0

और मैं अनावश्यक 'this.' के –

+1

@ सॉफ़्टवेयर बंदर को छोड़ दूंगा: यह मेरी कोड-शैली है, मुझे खेद है कि यह आपको परेशान करता है। – Pindatjuh

+0

@Pindatjuh: पर्याप्त मेला - मैंने कहा "मैं चाहता हूं", नहीं "आपको चाहिए"। प्रत्येक अपने स्वयं के लिए। यह मुझे परेशान नहीं करता है, यह सिर्फ अतिरिक्त टाइपिंग है। –

2

करने के लिए इसे बदल जाएगा यह अच्छा अभ्यास है? यह अच्छा है अगर यह पढ़ने में आसान बनाता है। यह पढ़ना आसान बनाता है अगर (1) यह करता है और (2) उस व्यक्ति की तरह जो इसे भ्रमित कर लेती है उसे पढ़ नहीं पाएगी। इसे पढ़ने वाला कौन है?

2

निम्नलिखित काम की तरह कुछ नहीं होगा?

if (methodName.equals("set" + this.name) 
    || methodName.equals("get" + this.name) 
    || (isBoolean() && methodName.equals("is" + this.name))) { 
    ... 
} 

यह तरीका है जिसमें आप त्रिगुट ऑपरेटर का इस्तेमाल किया और निश्चित रूप से समझने में अधिक आसान की तुलना में अधिक पठनीय है। यह भी लाभ है कि यह isBoolean विधि के लिए एक अनावश्यक विधि कॉल से बच सकता है (इसमें या तो 1, 2 या 4 विधि कॉल हैं जबकि आपके पास हमेशा 1 या 3 है; प्रदर्शन लाभ/हानि शायद नोटिस करने में बहुत कम है)।

इसके अलावा वहाँ एक समान प्रश्न यहाँ शीर्षक "Is this a reasonable use of the ternary operator?" एक उपयोगकर्ता the following to say था है:

त्रिगुट ऑपरेटर वापसी एक मूल्य के लिए है।

आईएमओ, इसे राज्य को म्यूटेट नहीं करना चाहिए, और वापसी मूल्य का उपयोग किया जाना चाहिए।

अन्य मामले में, यदि बयानों का उपयोग करें। यदि कथन कोड ब्लॉक्स निष्पादित करने के लिए हैं।

ध्यान दें कि मैं पठनीयता के लिए '& &' वाले अभिव्यक्ति के आसपास कोष्ठक शामिल थे। वे आवश्यक नहीं हैं क्योंकि x && y का मूल्यांकन m || n से पहले किया गया है।

चाहे आप इसका उपयोग करना चुनते हैं, आप पर निर्भर है, लेकिन मैं इसे पठनीयता के पक्ष में टालना चाहता हूं।

+0

आपकी पुनर्लेख बहुत व्यावहारिक है, क्योंकि "getSomeBooleanProperty" विधि भी पास हो जाएगी। हालांकि, यह एसएलएक्स (व्यक्तिपरक) के रूप में पठनीय नहीं है। – Pindatjuh

2

मैं निकाले कुछ कार्यों के साथ

if (methodName.equals(setterForThis()) 
    || methodName.equals(getterForThis())) { 
    ... 
} 

लिए इसे बदलने के लिए इच्छुक होगा:

private String setterForThis() { 
    return "set" + this.name; 
} 

private String getterForThis() { 
    return (isBoolean() ? "is" : "get") + this.name; 
} 

यह अब निश्चित रूप से है, लेकिन मैं वैसे भी गोल्फ में वास्तव में नहीं हूँ।

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