बूल तरीकों का नामकरण: क्या बनाम बनाम?


51

बूलियन लौटाने वाली विधि का बेहतर नाम कौन सा है?

IsSupportContentType

या

CanSupportContentType

9
चूंकि इरादा नाम के लिए स्पष्ट रूप से राज्य या व्यवहार को व्यक्त करने के लिए है, और आप कभी नहीं कहेंगे "यह वर्ग समर्थन प्रकार X है," बेहतर नाम CanSupportContentType है। आप कुछ इस तरह कहेंगे "यह वर्ग सामग्री X का समर्थन कर सकता है।"
क्रेग

8
एक देशी वक्ता नहीं, लेकिन क्या SupportContentType सबसे "व्याकरणिक" विकल्प नहीं होगा?
रोमन रेनर

8
पहले एक को IsSupportedContentTypeव्याकरणिक रूप से सही होना होगा। (जब तक "सपोर्ट कंटेंट टाइप" एक संज्ञा के रूप में कार्य करता है, जो कि संभावना नहीं लगती है)
कोडइन्चोस

30
बस के बारे में क्या supportsContentType? निम्नलिखित पूरी तरह से पठनीय है if (abc.supportsContentType("text/html")):। "समर्थन कर सकते हैं" का अर्थ है कि सामग्री-प्रकार का समर्थन करने के लिए आगे की शर्तें हैं।
ओलिवियर ग्रेजायर

10
@EylandYutani IsCanHasSupportCheezburger?
आरएम

जवाबों:


106

बनाम कैन है

Microsoft के नामकरण सम्मेलन की सिफारिशों के अनुसार , बूलियन के लिए उपसर्ग के रूप में "Is" और "Can" दोनों ठीक हैं (और इसलिए "है")।

सादे अंग्रेजी में, "Is" का उपयोग स्वयं के प्रकार के बारे में कुछ पहचानने के लिए किया जाएगा, न कि यह क्या कर सकता है। उदाहरण के लिए, IsFixed, IsDerivedFrom, IsNullableसभी CLR प्रकार और विधियों में पाया जा सकता। इन सभी मामलों में, विशेषण के बाद "इस्" है ।

इस बीच, "सकता है" और अधिक स्पष्ट रूप से एक की क्षमता को इंगित करता है, उदाहरण के लिए CanEdit, CanRead, CanSeek। इनमें से प्रत्येक मामले में, एक क्रिया द्वारा पीछा किया जा सकता है ।

चूंकि "समर्थन" एक क्रिया है, मुझे लगता है कि आपके मामले CanSupportContentTypeमें बेहतर है।

छोटा विकल्प

दूसरी ओर, सम्मेलनों का कहना है कि उपसर्ग वैकल्पिक है। क्या अधिक है, विधि नाम में तर्क प्रकार को शामिल करने के लिए चेसिस की तरह है, क्योंकि एक डेवलपर इंटेलीजेंस में तर्क के प्रकार को देख सकता है। तो आप बस अपने तरीके को नाम दे सकते हैंSupports और इसे इस तरह परिभाषित कर सकते हैं:

public bool Supports(System.Net.Mime.ContentType contentType)

... जो छोटा है और अभी भी स्पष्ट रूप से उद्देश्य का संचार करता है। आप इसे इस तरह कहेंगे:

ContentType contentType = new ContentType("text/plain");
var someClass = new MediatorsClass();
bool ok = someClass.Supports(contentType);

या एक समझौते के रूप में शायद यह सबसे अच्छा है:

public bool CanSupport(System.Net.Mime.ContentType contentType)

53
यह अच्छा है जब यह अच्छी तरह से पढ़ता है:if ( someClass.Supports(contentType) )
candied_orange

5
... याhasSupportedContentType
बरगी

8
एक विधि जिसे "कैनसुपोर्ट्स" कहा जाता है, मुझे आश्चर्यचकित करती है कि किसने सॉफ़्टवेयर को डिब्बे (जैसे टिन के डिब्बे) में सक्षम बनाने में समय बिताया। बस "समर्थन" बेहतर विकल्प है, इसमें कोई संदेह नहीं है!
टी। सर - मोनिका

6
कभी-कभी डेवलपर्स यह नहीं बता सकते हैं कि कुछ "अजीब लगता है", उदाहरण के लिए यदि अंग्रेजी उनकी पहली भाषा नहीं है।
जॉन वू

4
कभी-कभी एक छोटा संस्करण खराब होता है। उदाहरण के लिए C ++ मानक पुस्तकालय में है std::vector::empty()। केवल अपने नाम से, क्या यह वेक्टर को खाली करता है? या क्या यह वापस आता है कि क्या वेक्टर खाली है? वास्तव में बाद वाला, चूंकि पूर्व कार्य द्वारा किया जाता है std::vector::clear()। लेकिन आप सामान्य रूप से डॉक्स को ज़रूर पढ़ें। एक विपरीत उदाहरण के रूप में, क्यूटी QVectorको इस संबंध में समझना आसान है, क्योंकि शून्यता के लिए इसकी जाँच का तरीका है QVector::isEmpty()
रुस्लान

9

यह ध्यान देने योग्य है कि " चाहिए " उपसर्ग का भी उपयोग किया जा सकता है। ऐप्पल की गाइडलाइन के अनुसार , न केवल " कैन " और " चाहिए ", सामान्य तौर पर क्रियाओं का उपयोग उन कार्यों को नाम देने के लिए किया जा सकता है जो बूलियन लौटाते हैं। मैं के कई उपयोग नहीं देख सकते हैं " होगा " लेकिन " चाहिए " सलाह-में पूछताछ करने के लिए हुक अच्छा, के रूप में reactjs में देखा जाता है:

shouldComponentUpdate: (newProps: any) => boolean

19
imho बहुत गरीब नामकरण करना चाहिए , "ठीक है, इसे दस्तावेज़ को बंद कर देना चाहिए , लेकिन मुझे वास्तव में बहुत यकीन नहीं है"
लोविस

1
@ एल्विस: मुझे लगता है कि हैरी की टिप्पणी बहुत मान्य है। उदाहरण के लिए, मैं कुछ डेटाबेस से संबंधित क्रियाओं को एक प्लगइन लेयर के माध्यम से सौंप सकता हूं, प्रत्येक प्लगइन में एक "ShouldCloseConnection" विधि होती है जो फ्रेमवर्क को सूचित करती है कि कुछ सफाई की जानी चाहिए। बस एक उदाहरण है, लेकिन "चाहिए" निश्चित रूप से एक वैध उपसर्ग है।
greg

1
@ किस तरह से कम अस्पष्ट है WillCloseConnection?
बेसिक

@ लोविस हम आम तौर पर उपयोग करते हैं is...लेकिन should...कुछ फ़ंक्शन तर्क नामों में उपयोग करते हैं, उन स्थानों पर जहां बूलियन इंगित करता है कि फ़ंक्शन को चीजों को बदलने के लिए क्या माना जाता है । यदि कोई फ़ंक्शन वैकल्पिक रूप से किसी दस्तावेज़ को बंद कर सकता है, तो इसे नियंत्रित करने वाले पैरामीटर को कॉल isClosedकरना सटीक होगा (यह अभी तक बंद नहीं है ) और इसलिए हम यह shouldCloseइंगित करने के लिए उपयोग करेंगे कि यह फ़ंक्शन क्या करने वाला है। (मनमाने ढंग से उदाहरण; हमारे पास इस तरह का कोई फ़ंक्शन नहीं होगा, विशेष रूप से एक दस्तावेज़ को बंद करने के बाद से एक समर्पित कॉल करने के लिए पर्याप्त वजनदार होना चाहिए।)
केरेन

@ बासिक कम से कम हमारे मामले में, will...अतुल्यकालिक कार्यों के लिए आरक्षित है जो एक वादा वापस करते हैं; यदि मेरी पिछली टिप्पणी में वर्णित फ़ंक्शन समकालिक है, तो उपयोग will...करना हमारे नामकरण के साथ असंगत होगा।
केरान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.