बूलियन लौटाने वाली जावा विधियों के नामकरण परंपराएं (कोई प्रश्नचिह्न नहीं)


94

मुझे अन्य भाषाओं में विधि / फ़ंक्शन नामों के अंत में प्रश्न चिह्न का उपयोग करना पसंद है। जावा मुझे ऐसा नहीं करने देता। वर्कअराउंड के रूप में मैं बूलियन रिटर्निंग विधियों को जावा में और कैसे नाम दे सकता हूं? एक का उपयोग करना is, has, should, canएक विधि ध्वनि कुछ मामलों के लिए ठीक सामने। क्या ऐसे तरीकों को नाम देने का एक बेहतर तरीका है?

उदाहरण के लिए createFreshSnapshot?


2
?विधि नाम में कौन सी भाषा अनुमति देती है ?
SLACs

11
@ एसएलएस, स्कीम, रूबी ...
स्किलड्रिक

योजना में, हम हमेशा pविधि नाम के अंत में डालते हैं
एरिक रॉबर्टसन

@ एरिक: हमेशा नहीं, लेकिन "पी" एक मानक तरीका है भविष्यवाणी करने का
जेसन एस

हमने = मेरी स्नातक योजना कक्षा हमेशा की। मैं जावा में इस सम्मेलन का उपयोग कभी नहीं करूंगा।
एरिक रॉबर्टसन

जवाबों:


122

अधिवेशन नाम में एक प्रश्न पूछने के लिए है।

यहाँ कुछ उदाहरण हैं जो JDK में पाए जा सकते हैं:

isEmpty()

hasChildren()

इस तरह, नामों को पढ़ा जाता है जैसे कि उनके अंत में एक प्रश्न चिह्न होगा।

क्या संग्रह खाली है?
क्या इस नोड में बच्चे हैं?

और, फिर, trueइसका मतलब हां है, और falseइसका मतलब है कि नहीं।

या, आप इसे एक जोर की तरह पढ़ सकते हैं:

संग्रह खाली है।
नोड में बच्चे हैं

नोट:
कभी-कभी आप किसी विधि को कुछ नाम देना चाहेंगे createFreshSnapshot?। प्रश्न चिह्न के बिना, नाम का अर्थ है कि विधि को स्नैपशॉट बनाना चाहिए, यह देखने के लिए कि क्या कोई आवश्यक है, जांचने के बजाय।

इस मामले में आपको वह पुनर्विचार करना चाहिए जो आप वास्तव में पूछ रहे हैं। कुछ ऐसा है जो isSnapshotExpiredएक बेहतर नाम है, और यह बताता है कि विधि आपको क्या बताएगी जब इसे कहा जाता है। इस तरह एक पैटर्न का पालन करने से आपके कार्यों को अधिक शुद्ध और बिना साइड इफेक्ट के रखने में मदद मिल सकती है।

यदि आप जावा एपीआई में एक Google खोज करते हैं isEmpty(), तो आपको बहुत सारे परिणाम मिलते हैं।


CreateFreshSnapshot के बारे में क्या?
15

4
@letr, ठीक है, मैं शायद इसका नाम बदलकर जलाऊंगा isSnapshotExpiredया ऐसा ही कुछ। (अपने मानदंडों के आधार पर)
jjnguy

8
मुझे 'create' शब्द का उपयोग करके 'createFrshSnapshot' समस्या मिलती है - यानी "shouldCreateFreshSnapshot ()" (हालांकि इस मामले में SnapshotExpired () बेहतर है)
DJClayworth

1
मैं यह देखने के लिए जांच करता हूं कि क्या दिल की धड़कन वाले संदेशों को एक shouldHeartbeat()विधि के साथ भेजा जाना चाहिए ।
एरिक रॉबर्टसन

क्यों कि लगता है isEmpty()और hasChildren()कर रहे हैं सवाल है, और न दावे ? यह वास्तव में अंग्रेजी में थोड़ा बेहतर पढ़ता है यदि आप उन नामों के बारे में सोचते हैं या भविष्यवाणी करते हैं।
रिक डि

29

यदि आप चाहते हैं कि आपकी कक्षा जावा बीन्स विनिर्देशन के अनुकूल हो , ताकि प्रतिबिंब का उपयोग करने वाले उपकरण (जैसे JavaBuilders , JGoodies बाइंडिंग ) बूलियन गेटर्स को पहचान सकें, या तो उपयोग getXXXX()कर सकते हैं या isXXXX()विधि नाम के रूप में। जावा बीन्स कल्पना से:

8.3.2 बूलियन गुण

इसके अलावा, बूलियन गुणों के लिए, हम पैटर्न को मिलाने के लिए एक गेटर विधि की अनुमति देते हैं:

public boolean is< संपत्तिनाम > ();

यह "< संपत्ति नाम >" विधि "प्राप्त < संपत्तिनाम >" विधि के बजाय प्रदान की जा सकती है , या इसे "प्राप्त < संपत्तिनाम >" विधि के अलावा प्रदान किया जा सकता है । या तो मामले में, यदि बूलियन संपत्ति के लिए " < संपत्ति नाम >" विधि मौजूद है, तो हम संपत्ति मूल्य को पढ़ने के लिए " < संपत्ति नाम >" विधि का उपयोग करेंगे । एक उदाहरण बूलियन संपत्ति हो सकती है:

public boolean isMarsupial();
public void setMarsupial(boolean m);

जब आप कहते हैं कि public boolean is<PropertyName>(); यह भ्रामक है तो यह एक सामान्य जैसा दिखता है।
एरिक रॉबर्टसन

अरे, मैं सिर्फ कल्पना उद्धृत कर रहा हूं। मैं कल्पना के अनुसार italicize हूँ।
जेसन एस

4
मुझे परवाह नहीं है जावा बीन्स अनुकूलता, मैं सिर्फ सही ध्वनि करने के लिए अपने तरीके के नाम चाहते हैं :)
Letronje

4
यहां तक ​​कि अगर आप Javabeans संगतता के बारे में परवाह नहीं करते हैं, तो नामकरण सम्मेलन निम्नलिखित लायक है, क्योंकि यह आईडीई में कॉन्फ़िगर किए जा रहे 'बीन्स' के मूल दायरे से परे हो गया है। उदाहरण के लिए, यदि आप विधि नाम के रूप में उपयोग नहीं करते हैं, तो आप इस विधि को JSP से ऑब्जेक्ट .empty का उपयोग करके कॉल कर सकते हैं, हालाँकि आप अन्य उपसर्गों के साथ विधियों को कॉल नहीं कर सकते हैं, इसलिए आप object.children को कॉल करने के लिए ऑब्जेक्ट का उपयोग नहीं कर सकते हैं। चिल्ड्रेन ()। तो JSP और EL (एक्सप्रेशन लैंग्वेज) आपको Javabeans Properties एक्सेस करने देता है। मुझसे पूछें तो बड़ी जीत।
स्टिजेन डे विट

JavaBeans बहुत विशिष्ट है, यह याद दिलाने के लिए धन्यवाद। मुझे अक्सर आश्चर्य होता है और लगता है कि मैं 'उपसर्ग' के साथ फंस गया हूं, लेकिन वास्तव में ऐसा नहीं है।
Snicolas

26

मैं इस लिंक को पोस्ट करना चाहता हूं क्योंकि यह इस उत्तर की जांच करने और अधिक जावा स्टाइल कन्वेंशन की तलाश में मदद कर सकता है

जावा प्रोग्रामिंग स्टाइल दिशानिर्देश

आइटम "2.13 है उपसर्ग बूलियन चर और तरीकों के लिए इस्तेमाल किया जाना चाहिए।" विशेष रूप से प्रासंगिक है और सुझाव है कि उपसर्ग है।

शैली मार्गदर्शक सुझाव देता है:

कुछ विकल्प हैं करने के लिए है उपसर्ग फिट कुछ स्थितियों में बेहतर है। ये रहे है , कर सकते हैं और चाहिए उपसर्ग:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;

यदि आप दिशानिर्देशों का पालन करते हैं तो मेरा मानना ​​है कि उपयुक्त विधि का नाम दिया जाएगा:

shouldCreateFreshSnapshot()

2
FYI करें, वहां दिशानिर्देश कॉपीराइट Geotechnical सॉफ़्टवेयर सेवाएँ हैं। उन्होंने कहा, उन्होंने सुझाव दिया है कि वे वैध होने के लिए नीचे दिए गए स्रोत का संदर्भ लें।
डोनाल लाफ्टर

11

उन तरीकों के लिए जो विफल हो सकते हैं, जैसे कि आप बूलियन को रिटर्न प्रकार के रूप में निर्दिष्ट करते हैं, मैं उपसर्ग का उपयोग करूंगा try:

if (tryCreateFreshSnapshot())
{
  // ...
}

अन्य सभी मामलों के लिए उपसर्गों का उपयोग करें जैसे is.. has.. was.. can.. allows....


15
लेकिन कोशिश मत करो कि यह एक सवाल है (एक वापसी मूल्य है)।
स्टीव कूओ

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

5

मानक का उपयोग उपसर्ग के रूप में 'is' या 'has' है। उदाहरण के लिए isValid, hasChildren


2

isवह है जो मैं किसी भी अन्य की तुलना में अधिक आया हूं। मौजूदा स्थिति में जो भी समझ में आता है वह सबसे अच्छा विकल्प है।


0

मैं इस सामान्य नामकरण सम्मेलन पर एक अलग दृष्टिकोण बताना चाहता हूं , जैसे:

java.util.Set देखें :boolean add​(E e)

औचित्य कहां है:

कुछ प्रोसेसिंग करें फिर रिपोर्ट करें कि यह सफल हुआ या नहीं

जबकि returnवास्तव booleanमें विधि का नाम परिणाम के प्रकार (इस उदाहरण के लिए बूलियन) के बजाय प्रसंस्करण को पूरा करना चाहिए ।

आपका createFreshSnapshotउदाहरण मेरे लिए इस दृष्टिकोण से अधिक लगता है क्योंकि इसका मतलब यह प्रतीत होता है: एक ताज़ा-स्नैपशॉट बनाएं और फिर रिपोर्ट करें कि क्या निर्माण-संचालन सफल हुआ है। इस तर्क को देखते हुए नाम createFreshSnapshotआपकी स्थिति के लिए सबसे अच्छा लगता है।


1
मुझे यकीन नहीं है कि आपको नीचा दिखाया जा रहा है, मैं सहमत हूं। भले ही मैं इसका उपयोग करने से बचता हूं, क्योंकि यह अर्थपूर्ण नहीं है, यह कई आंतरिक जावा एपीआई द्वारा उपयोग किया जाने वाला एक सम्मेलन है।
कामिल बोबेन

1
मुझे लगता है क्योंकि शुरू में मैंने केवल "सेट: बूलियन ऐड (ई ई)" लिखा था, इसलिए लोगों ने यह नहीं देखा कि जाने-माने java.util.Set के बारे में क्या है; या शायद इसलिए कि मेरी अंग्रेजी इतनी खराब है: डी।
अपवोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.