बूलियन फ़ील्ड का नामकरण जो एक क्रिया है


14

जावा में, बुलियन फील्ड के लिए कन्वेंशन गेट्टर और सेटर होगा isField()और setField()। यह बिल्कुल ठीक फ़ील्ड नामों कि विशेषण हैं चाहते साथ काम करता है active, visible, closed, आदि

लेकिन मैं ऐसे क्षेत्र का नाम कैसे दूं, जिसका अर्थ एक क्रिया है, जैसे haveChildren? क्रिया में "_ing" जोड़ें ( ), हो सकता है?havingChildren

स्पष्ट करने के लिए, मेरे पास विधि नाम (गेट्टर और सेटर) का नियंत्रण नहीं है क्योंकि वे आईडीई द्वारा ऑटो-जेनरेट किए जाते हैं। इसलिए मुझे एक उपयुक्त फ़ील्ड नाम की आवश्यकता है ताकि जब IDE इसके लिए एक गेटर उत्पन्न करे, तो यह होश उड़ा दे। उदाहरण के लिए, hasChildrenएक संपूर्ण फ़ील्ड नाम है, लेकिन जब IDE फ़ील्ड के लिए गेटर उत्पन्न करता है isHasChildren। मैं इसे कैसे हल करूं?


3
यदि यह एक बूल फ़ील्ड है, parentतो काम करेगा।
यानि

2
यदि आप अर्थ निकालने के साथ दूर जा सकते हैं, तो 'निःसंतान' इस चाल को पूरा करेगा।
किलन फ़ॉथ

3
आईडीई की वजह से व्याकरणिक मुद्दे से बचने के लिए एक क्षेत्र के नाम के बारे में हूप्स के माध्यम से कूदने के लिए मूर्खतापूर्ण लगता है। भले ही, यहां कुछ अतिरिक्त सुझाव हैं, हालांकि मुझे लगता है कि पहले से ही दूसरों द्वारा दिए गए बेहतर हैं: isAllowedChildren, isNotEmpty, isContainer, isLeaf,
डॉ। विली के शिक्षु

निःसंतान को जाने का रास्ता लगता है। माता-पिता के साथ समस्या मैं पहले से ही मूल वस्तु के संदर्भ को रखने के लिए एक मूल क्षेत्र है। मुझे लगता है कि बूलियन फ़ील्ड्स के लिए सभी क्रियाओं को विशेषण में बदलने के लिए मुझे एक सामान्य नियम की आवश्यकता है।
दिनांग

1
मैं @dnhang से सहमत हूं कि आपको आईडीई को इस तरह की चीजें नहीं करने देना चाहिए। आपके कोड को पठनीय बनाने के लिए परिवर्तनशील और विधि नामों का चयन करना महत्वपूर्ण है, जिस आईडीई में लिखा गया है वह अप्रासंगिक होना चाहिए।
डिजिटेलैक्स

जवाबों:


11

संक्षिप्त जवाब:

  • विधि के नाम आंतरिक कार्यान्वयन लेकिन अपेक्षित व्यवहार को प्रतिबिंबित करने के लिए नहीं बनाए गए हैं।

लंबा जवाब:

haveChildren()नाम होना चाहिए hasChildren()

इसके अलावा, मैं hasChildren()आवश्यक रूप से एक बूलियन वर्ग के सदस्य के लिए गेटटर के रूप में नहीं देखता हूं । मुझे लगता है कि इस तरह की विधि से पता चलेगा कि प्रकार Collectionका कोई सदस्य खाली है या नहीं ।

डिफ़ॉल्ट नाम एक आईडीई उत्पन्न गेटर्स को देता है और बसने वाले को पत्थर में स्थापित कानून होने के लिए अधिमानित नहीं किया जाता है।

एक और बिंदु: इंटरफेस में अभी तक लागू होने वाले तरीकों के नाम हैं।

यदि आंतरिक कार्यान्वयन को प्रतिबिंबित करने के लिए विधि के नाम रखे गए थे, तो कोई व्यक्ति कभी भी इंटरफ़ेस कैसे डिज़ाइन कर पाएगा? इंटरफेस का कार्यान्वयन नहीं है और न ही वे पहले से जानते हैं कि कार्यान्वयनकर्ता हुड के तहत क्या करेंगे।

उदाहरण के लिए Iteratorजावा में इंटरफेस लें ।

जब आप को लागू Iteratorहोने के बावजूद, एक बूलियन सदस्य नामित किया गया है next, जिसका नाम आप बदलना supossed नहीं कर रहे हैं hasNext()करने के लिए isNext()या isHavingNext()। यह एक कार्यान्वयन विवरण है। वास्तव में, मैंने लागू किया है Iteratorऔर जो मैं करता हूं, वह उस प्रकार का सदस्य है जिसके पास मेरी कक्षा की सूची है, जिसका नाम next(बूलियन नहीं) है। hasNext()फिर लौटता है next!=null

इसे भी देखें:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

ध्यान दें कि isDead()कोई सामान्य गेट्टर नहीं है।

वे क्या हैं के लिए IDEs के उत्पादकता उपकरण लें।


3

मैं सुझाव parentदूंगा कि क्षेत्र का नाम बदलकर गटर हो isParentऔर सेटर होगा setParent

तुम भी कोशिश कर सकते हैं childPresentचर नाम और के लिए isChildPresentऔर setChildPresentगेटर और सेटर के रूप में।


1
यनीस की टिप्पणी के रूप में एक ही विचार ऊपर है, लेकिन समस्या यह है कि मेरे पास पहले parentसे ही मूल वस्तु के संदर्भ को रखने के लिए एक क्षेत्र है। मुझे लगता है कि बूलियन फ़ील्ड्स के लिए सभी क्रियाओं को विशेषण में बदलने के लिए मुझे एक सामान्य नियम की आवश्यकता है।
dnang

0

आप doesक्रिया से पहले रख सकते हैं । जैसे कि doesHaveChildrenआपके द्वारा दिए गए उदाहरण में। या शायद shouldHaveChildrenसंदर्भ के आधार पर।


1
समस्या यह है, मेरे पास विधि के नाम का नियंत्रण नहीं है क्योंकि आईडीई (जैसे ग्रहण) द्वारा गेट्टर और सेटर स्वतः उत्पन्न होते हैं।
dnang

1
बस विधि का नाम बदलें? नाम बदलने के तरीकों के लिए एक कीबाइंड जोड़ें (यदि आपको पहले से कोई नहीं मिला है)।
मिग्वेलमार्टिन

@dnhang यदि यह आपका कोड है, तो आप जो भी चाहें तरीके से कॉल कर सकते हैं, भले ही आईडीई उन्हें ऑटो-जेनरेट करता हो।
रिचर्ड

1
@ Miguel.martin एक कारण जो आप यह नहीं करना चाहते हैं वह है जावा-बीन्स। की धारणा isSomethingउस विनिर्देश का एक हिस्सा है और इसके चारों ओर कई धारणाएं बनाई गई हैं, बेहतर या बदतर के लिए, इसके खिलाफ जाने से doesSomethingचीजों को स्पष्ट तरीके से नहीं तोड़ा जा सकेगा, जिससे कीड़े पैदा होंगे।

0

सवाल पूरी तरह से उचित है। कभी-कभी ऑटो-जनरेटेड विधि का नाम बदलना पर्याप्त नहीं होता है। उदाहरण: JSF प्रबंधित बीन्स से संपत्ति isXyz()के गेटटर विधि के रूप में होने की उम्मीद की जाती है boolean xyz

मैं ब्लैकपैंथर से सहमत हूं, जो विधि के नाम के रूप में फ़ील्ड का नाम बदलने parentऔर उपयोग करने का सुझाव देता है isParent। जानकारी छिपाने के सिद्धांत के अनुसार, गेट्टर और सेटर के तरीकों की पठनीयता विशेषता की तुलना में अधिक महत्वपूर्ण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.