2009-11-17 25 views
6

मैं हाल ही में कोड पूर्ण पढ़ रहा हूं, यहां कई संदर्भों के आधार पर और एक दोस्त द्वारा, और समुदाय के लिए नामकरण प्रश्न था। क्या उपसर्ग "है" को बूलियन विधियों पर उपयोग किया जाना चाहिए जो यह निर्धारित करता है कि कोई ईवेंट सफल हुआ है या नहीं? यहाँ दो अलग नामकरण योजनाओं की एक कोड उदाहरण मैंने कोशिश की है:सत्यापन विधियों के लिए विधि नाम में उपसर्ग "है"

migrationSuccessful = CopyData(); 
if (VerifyCopyData()) 
    migrationSuccessful = CleanupData(); 

बनाम:

migrationSuccessful = CopyData(); 
if (IsDataCopied()) 
    migrationSuccessful = CleanupData(); 

सूचना VerifyCopyData और IsDataCopied के बीच का अंतर। मेरे लिए IsDataCopied अधिक सार्थक है और कोड को अधिक वर्णनात्मक पैटर्न में प्रवाह करता है।

आपके विचारों के लिए धन्यवाद!

संपादित करें: कुछ टिप्पणियों के आधार पर, मैंने सोचा कि मैं स्पष्ट करता हूं कि IsDataCopied विधि क्या करती है। यह कई निर्देशिकाओं और फ़ाइलों के माध्यम से loops और सुनिश्चित करता है कि स्रोत और गंतव्य निर्देशिका/फाइलें मिलती हैं।

+0

बस एक छोटी सी युक्ति, सुनिश्चित करें कि वे परीक्षण विधियों की तरह ध्वनि नहीं करते हैं, VerifyObjectIsNotNull, मैंने इसे देखा है और थोड़ा अस्पष्टता – Perpetualcoder

+0

एक सामान्य अवलोकन का कारण बनता है ... ऐसे प्रश्न अपवॉट को आकर्षित करते हैं .. – sud03r

+6

तथ्य यह है कि आपको यह स्पष्ट करना था कि आपको क्या करना है समारोह आपके लिए एक लाल झंडा होना चाहिए। ;) –

उत्तर

5

मैं मैथ्यू जोन्स है कि यह विधि IsDataCopied नाम के लिए बेहतर से सहमत हैं। हालांकि मैं जोड़ना चाहता हूं, कि जब अन्य कोड तत्वों से संबंधित कोड तत्वों का नामकरण करते हैं तो मुझे आम तौर पर सामने के बजाय नाम के अंदर Is डालना बेहतर लगता है क्योंकि यह इंटेलिसेंस में उस तत्व के करीब होगा जो उससे संबंधित है (और इस प्रकार खोजना आसान है)। उदाहरण के लिए, विनफॉर्म में, फॉर्म में Handle और IsHandleCreated संपत्ति है। यदि IsHandleCreated को HandleIsCreated नाम दिया गया था, तो यह Handle संपत्ति के करीब होगा और खोजने के लिए आसान होगा (Intellisense में नीचे दफन नहीं किया गया)।

+0

अच्छा विचार। मैंने इन शर्तों में इसके बारे में सोचा नहीं था, क्योंकि मैं इस बात पर ध्यान केंद्रित कर रहा था कि कोड कैसा दिखता था।यह न केवल पठनीय कोड बनाएगा, बल्कि बनाए रखने के लिए आसान कोड होगा। –

+0

मैंने कभी इस विचार को नहीं माना है ... मुझे यह बहुत पसंद है। मुझे चिंता है कि ज्यादातर लोगों की अपेक्षाओं से यह काफी भिन्न है कि यह दूसरों के उपयोग/रखरखाव के लिए कोड को कठिन बना देगा। – rmeador

8

मैं आपसे सहमत हूं। मेरे लिए, IsDataCopied बहुत अधिक पठनीय है।

अधिक आम तौर पर, VerifyCopyData मेरे लिए अस्पष्ट है कि यह सख्ती से एक सत्यापन विधि है या वास्तव में कुछ करता है या नहीं। IsDataCopied बहुत स्पष्ट है कि यह केवल यह देखने के लिए जांचता है कि डेटा कॉपी किया गया है या नहीं।

1

"चाहिए" एक व्यापक शब्द है। क्या आपको समझ में आता है। कई मामलों में, "Is" का उपयोग करके स्पष्ट होता है, लेकिन हमेशा नहीं।

फिर, क्या समझ में आता है।

+0

डाउनवॉटेड? वास्तव में? वाह लोग ... – Jason

+0

@ जेसन यह डाउनवॉटर द्वारा एक धारावाहिक ड्राइव था। मेरे साथ कम से कम एक वोट के साथ हर कोई मारा गया। –

+0

@matt लोगों के पास वास्तव में कुछ भी बेहतर नहीं है, है ना? – Jason

0

यह अच्छा है अगर आपके तरीकों में एक क्रिया हो सकती है जो वर्णन करता है कि विधि क्या करती है। VerifyCopyData लगता है जैसे यह डेटा सत्यापित करता है, जबकि isDataCopied लगता है जैसे यह कुछ तथ्य के अस्तित्व का परीक्षण करता है। यह एक सूक्ष्म भेद है। नाइटपिक: मैं पहली विधि VerifyCopiedData पर कॉल करूंगा।

1

मुझे लगता है कि "है" अधिक स्पष्ट होना है। "VerifyCopyData()" नामक एक फ़ंक्शन एक अपवाद फेंक सकता है जब डेटा कॉपी नहीं किया गया था, या साइड इफेक्ट्स हैं। शायद नहीं, लेकिन अगर मैं इसे पढ़ता हूं तो मुझे यकीन नहीं होगा कि यह क्या करना है। Is के साथ prefixed एक फ़ंक्शन स्पष्ट है: इस फ़ंक्शन का कोई दुष्प्रभाव नहीं होगा और प्रश्न के बूलियन उत्तर को वापस कर देगा।

एक क्रिया क्रिया (सत्यापन) होने से मेरा मतलब है कि फ़ंक्शन वास्तव में कुछ करता है। "है" का उपयोग करने में कोई क्रिया क्रिया नहीं है, इसलिए इसका तात्पर्य है कि फ़ंक्शन केवल राज्य की जांच करता है और कुछ भी नहीं करता है।

0

यदि यह कोई अन्य नाम होता तो मैं एक विचार देता, लेकिन VerifyCopyDataisDataCopied से निश्चित रूप से कम पठनीय है।

0

मैं सहमत हूं। "है" उपसर्ग होने से यह और स्पष्ट हो जाता है कि यह एक बूलियन फ़ंक्शन है। यह वास्तव में न केवल विधियों, गुणों और चरों को उपसर्ग करने के लिए कई नामकरण सम्मेलनों में एक मानक है।

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

1

यह निश्चित रूप से व्यक्तिपरक है, और अलग-अलग समय (विभिन्न पुस्तकालयों और यहां तक ​​कि विभिन्न भाषाओं के साथ काम करना), मैंने हमेशा इस तरह के उपसर्ग का उपयोग किया है और कभी भी उन्हें इस्तेमाल नहीं किया है — इस सम्मेलन को इसका उपयोग न करने के साथ मिश्रित करना अक्सर एक गलती होगी। तय करें कि संदर्भ के आधार पर कौन सा स्पष्ट है, जिसमें उस परियोजना/लाइब्रेरी/आदि में पहले से ही क्या किया जा रहा है।

उदाहरण के लिए, obj.DataIsCopied() देशी अंग्रेजी स्पीकर के लिए बेहतर प्रवाह करता है, लेकिन फिर आपके पास !obj.DataIsCopied() (या not) है। आपको सामना करना होगा कि आप कोड लिख रहे हैं और सम्मेलनों की आवश्यकता है, और उन सम्मेलनों में अर्थात् अर्थात् अर्थात् अर्थ (वर्णनात्मक अर्थ में) जोड़ना है।

इसके अतिरिक्त, मैं Verify नामक किसी भी विधि को सत्यापित करने के लिए कुछ "वास्तविक" काम करने की अपेक्षा करता हूं, जबकि Is या तो पहले से गणना/पहले से उपलब्ध मूल्य वापस कर सकता है या इसे तुच्छ रूप से गणना कर सकता है। उन भाषाओं में जहां आपके पास गुण हैं, यह अभिव्यक्त करना बहुत आसान है, क्योंकि आप उन चीज़ों को अलग कर सकते हैं जो "क्रियाएं" नहीं हैं। जैसे if (obj.data_copied) का उपयोग करके, चाहे वह डेटा सदस्य हो या एक मामूली फ़ंक्शन, जैसे IsDataCopied होगा, encapsulated है।

1

IsDataCopied इस विधि का इरादा अज्ञात है कि कम पढ़ा जा सकता है। अगर यह बस एक बुलियन लौटाता है और कुछ भी नहीं करता है, तो यह ठीक है। लेकिन, अगर यह एक सत्यापन कर रहा है, तो निर्दोष दिखने वाले सशर्त बयान के पीछे बहुत सारे कोड छिपाए जा सकते हैं।

मेरी सलाह:

bool isDataProperlyCopied = VerifyCopiedData(); 
if (isDataProperlyCopied) { 
    ... 
} 
+0

यदि यह एक विधि है, तो कॉलर संभावित रूप से महंगा साइड-इफेक्ट्स की अपेक्षा क्यों नहीं करनी चाहिए? यदि कोई नहीं था, तो यह एक संपत्ति होगी। –

0

मैं Is पसंद करते हैं जब यह चर और गुण

if(o.IsDataCopied) 
{ 
} 

लेकिन एक विधि कॉल के साथ इस मामले में मैं

if(DataIsCopied()) 
{ 
} 
1

data.isCopied() की तरह कुछ के लिए चुनते हैं की बात आती है

क्योंकि अंग्रेजी वीएसओ नहीं है, लेकिन एसवीओ है।

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