क्या मैं एक चर नाम का उपयोग करने के लिए अनैतिक हूं जो केवल मामले से अपने प्रकार से भिन्न है?


95

उदाहरण के लिए, कोड का यह टुकड़ा लें:

var person = new Person();

या आपके लिए पाइथोनिस्टस:

person = Person()

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

या कुछ ऐसा है जो मुझे याद आ रहा है? यदि हां, तो यह उपयोगी होगा यदि आप कोड का एक उदाहरण प्रदान कर सकते हैं जो समस्याओं का कारण बनता है।


मैंने हमेशा इस बारे में सोचा है। अच्छा प्रश्न!
विलियम ब्रेंडल

18
एक व्यक्ति को फोन करना सिर्फ क्रूर है। "बॉब" में क्या गलत है?
सैम मेल्ड्रम

17
चलो नहीं भूल जाते हैं कि var से पहले पर्सन पर्सन = नए पर्सन () की ज़ेन ब्यूटी थी;
जेमी इडे

1
@ जैमी क्या आप स्थिर टाइपिंग ज़ेन-जैसे कह रहे हैं?
orokusaki

मैं इस सवाल पर एक स्तर भी गहरा जाना चाहूंगा: क्या Person Person=new Person();इस मामले के लिए यह करना निर्विवाद रूप से गलत है? जैसा कि प्रश्न में कहा गया है, हम इस तरह के अविश्वसनीय वाक्य रचना हाइलाइटिंग और संदर्भ मान्यता के समय में रहते हैं कि मेरे संकलक ने मुझ पर कभी भी ऐसा करने की शिकायत नहीं की। मैं सिर्फ अपने चर प्यार करता हूँ CamelCased - तो फिर मैं क्यों नहीं करना चाहिए (उन स्थितियों में जहां Person Personएक सामान्य और केवल वर्ग की तात्कालिकता है और कोई संघर्ष मौजूद नहीं है और न ही संभव है)?
रॉबर्ट सिनोराडज़की

जवाबों:


94

यह बताने वालों का तर्क क्या है यह बुरा है? मेरे द्वारा हमेशा ऐसा ही किया जाता है। यह एक प्रकार के एकल चर का नाम देने का सबसे सरल, अभिव्यंजक तरीका है। यदि आपको दो Personवस्तुओं की आवश्यकता है तो आप personसार्थक विशेषणों जैसे उपसर्ग कर सकते हैं

fastPerson
slowPerson

नहीं तो बस

person

मेरे साथ ठीक है


8
"यह बताने वालों का तर्क क्या बुरा है?" - डन्नो। इसलिए मैंने इस विषय को शुरू किया। :-)
जेसन बेकर

स्पष्ट रूप से आपको कभी किसी और के कोड में नहीं आना चाहिए। मुझे पता है कि जब मुझे एक प्रोग्रामर द्वारा कई-कई वर्षों पुराने कोड में कुछ नए खोजे गए बग पर शोध करने के लिए बुलाया जाता है, जो कंपनी छोड़ने के बाद से बहुत लंबे समय से है - जो कुछ भी मुझे परेशान करने के तरीके से मिलता है, वह समस्या को ठीक नहीं करने का समय है। अगर उन बाधाओं में से एक यह पता लगाने की कोशिश कर रहा है कि एक उदाहरण क्या है और एक वर्ग क्या है, क्योंकि एक प्रोग्रामर को "var currentPerson = New Person ();" तब वह बेकार है, समय बर्बाद किया। ... और जब आपके ग्राहक तय होने का इंतजार कर रहे हैं, तो समय सार का है।
डेविड

3
@ डेविड - आपने मुझे पकड़ लिया! मुझे पता था कि वैक्यूम में कोडिंग उसके बदसूरत सिर को जल्दी या बाद में पीछे कर देगी :) गंभीरता से हालांकि - मुझे यह विश्वास करना मुश्किल है कि आप इस नामकरण सम्मेलन के आधार पर प्रकारों और उनके उदाहरणों के बीच विचार-विमर्श करने में असमर्थ होने के कारण फंस जाते हैं।
एंड्रयू हरे

2
@ डेविड - कोड विश्लेषण उपकरण के लिए यह समस्या होनी चाहिए। इसके अलावा, यही कारण है कि पायथन में अपरकेस अक्षर से शुरू होने वाला सम्मेलन है।
एलिया एन।

69

मैं इस पद्धति का उपयोग विधि हस्ताक्षरों में बहुत करता हूं। अगर मैं एक वैकल्पिक वर्णनात्मक नाम प्रदान करने में असमर्थ हूं तो IMHO, इसमें कुछ भी गलत नहीं है।

क्या गलत है यदि आप दो प्रकार के व्यक्ति और व्यक्ति हैं तो यह बहुत गलत है।


1
"क्या गलत है यदि आपके पास दो प्रकार के व्यक्ति और व्यक्ति हैं तो यह बहुत गलत है।" - इससे मुझे पूरी समझ है।
जेसन बेकर

1
यदि आपका API API VB का निर्माण कर रहा है, तो यह असंवेदनशील होने के बाद से कोड को संभाल नहीं पाएगा।
जोशबर्के

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

1
वास्तव में मेरी बात फ्रेडरिक दो प्रकार के होने के कारण जो केवल आधार के मामले में भिन्न है, एक बुरा विचार है ;-)
जोशबर्के

1
यहां तक ​​कि अगर यह गलत नहीं है, तो यह कोड को पढ़ने के लिए कठिन बना देता है। पठनीयता भी मायने रखती है।
J3r3myK

45

मैं इसे अस्थायी वस्तु संदर्भों के लिए हर समय उपयोग करता हूं। मैं इसे आदिम डेटा प्रकारों के प्लेग की तरह से बचाऊंगा।

Person person = new Person(); // okay

int Int = 42; // pure evil

अगर वास्तव में कोई अर्थ नहीं था, तो मैं एक आदिम दे सकता था जिसका उपयोग मैं या एस करूंगा, लूप इंडेक्स के अलावा मैं इस तरह के किसी अन्य परिदृश्य के बारे में नहीं सोच सकता।
एंथनीवजोन

1
अगर मैं एक लूप के साथ कोड लिख रहा हूं, तो मैं i का उपयोग करने के खिलाफ सलाह दूंगा। मैं लगभग सार्वभौमिक रूप से एक लूप चर नाम के रूप में माना जाता है।
जेसन बेकर

3
माना। एक एकल अक्षर चर नाम चिल्लाता है "मैं अस्थायी हूं।" लूप इंडेक्स मैं होना चाहिए, जे, के, किन्हीं अन्य को ए, बी, सी, एक्स, वाई, जेड, या कोई अन्य पत्र होना चाहिए जिसे किसी और चीज़ के लिए गलत नहीं किया जा सकता है, जैसे एल और ओ।
छिपकली

वाहवाही! 42 अभी बहुत ज्यादा है। :)
विशाल सेठ

18

अगर कोई कहता है कि बुराई है, तो उनसे पूछें कि क्या यह बेहतर है:

var abc = new Person();

2
@ क्रिस: बिल्कुल! या बेहतर अभी तक: var temp = new Person();(अस्वीकरण: मैं वहाँ पता वास्तव में एक समय का उपयोग अस्थायी चर के लिए स्थानों रहे हैं, लेकिन उतनी बार नहीं है जब मैं किसी के कोड में यह देखने के लिए, लेखक बस वापस कभी नहीं आसपास वर के लिए एक उपयुक्त नाम देने के लिए मिला है और यह हो सकता है साथ ही "एबीसी" हो।)
दीना

15

यदि व्यक्ति संदर्भ में एक सामान्य व्यक्ति है, तो "व्यक्ति" वास्तव में अच्छा नाम है। बेशक यदि व्यक्ति की कोड में एक विशिष्ट भूमिका है तो भूमिका का उपयोग करके उसका नाम देना बेहतर है।


9

मुझे लगता है मैं ऐसा कहने के लिए नीच हो जाऊंगा, लेकिन ...

सिर्फ एक सदी के महाकाव्य हत्या और लालच के माध्यम से आने के बाद, हम प्रोग्रामर वास्तव में धन्य हैं अगर हम सबसे अनैतिक काम कर सकते हैं तो इसका नाम चर है।


6
वैकल्पिक रूप से, अगर नैतिक निर्णय हम कर सकते हैं इस तरह के महत्व के हैं, हम शापित हैं। मुझे यकीन नहीं है कि मैं अपने अंतिम संस्कार स्तवन को अपनी कोडिंग शैली पर ध्यान केंद्रित करना चाहता हूं। मैं कम से कम एक परिवार का एक हिस्सा होने का उल्लेख करना चाहूंगा।
डेविड थॉर्नले

1
@ दाविद: फिर से। रास्ते में मेरे पहले ग्रैंडकिड के साथ, मुझे लगता है कि यह बहुत अच्छा है, लेकिन मुझे परवाह है कि हम किस तरह की दुनिया को सौंप रहे हैं।
माइक डनलवेई

8

मुझे नहीं लगता कि यह आवश्यक रूप से "बुरा" है, लेकिन जाहिर है अगर आप इसे अधिक संदर्भ देने के लिए अर्हता प्राप्त कर सकते हैं, जैसे कि यह किस प्रकार का व्यक्ति है (आप संभवतः कई संभावित व्यक्तियों में से केवल एक के साथ काम कर रहे हैं), तो कोई और इसे उठा रहा है ऊपर बेहतर समझ सकते हैं।


6

जेसन - मुझे यकीन नहीं है कि आपको किसने बताया है कि यह बुरा है। कई लेखक इसे एक वर्ग (पूंजीकृत) के उदाहरण (निचले मामले) को व्यक्त करने के मानक तरीके के रूप में उपयोग करते हैं ।

मैं इसे अक्सर उपयोग करता हूं क्योंकि मुझे लगता है कि कम-कैसड चर वास्तव में मुझसे न केवल संवाद करता है कि यह एक उदाहरण है, बल्कि कक्षा का नाम भी है।

जब तक किसी के पास इसके विपरीत कोई ठोस तर्क नहीं है, मैं निश्चित रूप से ऐसा करना जारी रखूंगा।


6

इसका कारण यह माना जाता है कि यदि आपको भविष्य में 2 व्यक्ति की जरूरत है, तो आप उस कोड को समाप्त कर सकते हैं जो दिखता है।

व्यक्ति व्यक्ति = नया व्यक्ति ();

व्यक्ति person2 = नया व्यक्ति ();

इसके बाद "बैड" पर बॉर्डरिंग होगी। हालाँकि, उस स्थिति में आपको दोनों के बीच अंतर करने के लिए अपने मूल व्यक्ति को फिर से भरना चाहिए।

आपके उदाहरण के लिए, चर नाम "व्यक्ति" वस्तु "व्यक्ति" के लिए एक पूरी तरह से वर्णनात्मक नाम है। इसलिए इसमें कुछ भी गलत नहीं है।


3

मैं कहता हूं कि यह क्या है के लिए नाम: यदि चर 2 कुत्तों के साथ एक व्यक्ति का प्रतिनिधित्व करता है, तो इसे कॉल करें personWith2Dogs। इसमें चर का दायरा कम है (लूप वर् की तरह) तो व्यक्ति ठीक है।


3

मैं अपने कोड में बहुत उपयोग करता हूं, और यह नहीं सोचता कि इसमें कुछ गलत है। कहा कि, मैं (शायद) एक विधि से अधिक समय तक इसका उपयोग नहीं करूंगा, एक स्क्रीन कहो, और यदि व्यक्ति वर्ग के कई उदाहरण हैं। निश्चित रूप से उन्हें person1, person2, person3 नाम न दें ... इसके बजाय कुछ और वर्णनात्मक का उपयोग करें, जैसे person_to_del, person_to_ban, person_to_update, आदि।


3

अनैतिक नहीं, लेकिन एक वैश्विक खोज दोनों मिल जाएगी Personऔर personयदि आप केस-संवेदनशीलता को सक्रिय करने में विफल रहते हैं। मैं वैश्विक खोज / आसान को बदलने के लिए एक उपसर्ग पसंद करता हूं, लेकिन हंगेरियन या कुछ लंबा / जटिल नहीं है। तो, मैं उपयोग ...

Personवर्ग aPersonचर के thePersonलिए myPersonउदाहरण चर के ourPersonलिए विधि पैरामीटर के लिए स्थानीय चर के लिए वर्ग / प्रकार के लिए

दुर्लभ अवसर पर, मैं pएक स्थानीय संदर्भ में उपयोग कर सकता हूं, जहां मेरे पास बहुत सारे संदर्भ हैं, लेकिन यह आमतौर पर केवल लूप इंडेक्स और इस तरह लागू होता है।


3

निर्भर करता है।

यदि आपके पास एक सख्त कैपिटलाइज़ेशन शैली है, तो चर कम होने लगते हैं (और शब्द विराम के लिए अंडरस्कोर या कैमलकेस का उपयोग करें), और क्लास कैपिटल लेटर्स से शुरू होते हैं, तो यह स्पष्ट है कि व्यक्ति एक चर है और व्यक्ति एक वर्ग है, और जब कोई इसे समझता है , वे ओवरलैपिंग नेमस्पेस में नहीं होंगे। (इसी तरह, लोग क्रिया या संज्ञा "पॉलिश" और विशेषण "पोलिश" के बीच लगभग कभी भ्रमित नहीं होते हैं।)

यदि आपके पास ऐसी शैली नहीं है, तो आपको दो नाम मिले हैं जो आसानी से भ्रमित हो सकते हैं, और केवल मामले में भिन्न हो सकते हैं। यह बुरी बात है।


हाय फिर डेविड। मुझे याद नहीं है कि क्या आप एक हैं जिन्होंने मेरी पोस्टिंग में से एक को संपादित किया क्योंकि मैंने "पोलिश" लिखा था, या क्या यह "पॉलिश" था, जब मुझे चमकने तक कुछ रगड़ने का मतलब था? ओह ठीक है, मुझे अभी भी यकीन नहीं है कि कौन सा सही है :-)
माइक डनलवेई

मुझे नहीं लगता कि मैंने ऐसा कोई संपादन किया है, इसलिए यह शायद कोई और था। BTW, यह "पॉलिश" है।
डेविड थॉर्नले

2

उन लोगों के सटीक तर्क क्या हैं?

यदि वे आपको एक चर नाम के रूप में व्यक्ति का उपयोग करने की अनुमति नहीं देते हैं, तो आप 'उप' उपसर्ग जोड़ने पर विचार कर सकते हैं।

aPerson = Person()

2
इससे भी बुरा, मेरी राय में होगा। यह पढ़ना कठिन है और यह कोई अतिरिक्त जानकारी प्रदान नहीं करता है।
जोचिम सॉरे

हाँ, लेकिन कम से कम नाम वर्ग के नाम से अलग है, जो कि वे स्पष्ट रूप से चाहते हैं।
गेर्री शेंक

यह कानून के पत्रों का पालन होगा, लेकिन निश्चित रूप से आत्मा नहीं।
जोआचिम सॉयर

1
+1, मैं उन मापदंडों के लिएPPerson और स्थानीय लोगों के लिए MyPerson का उपयोग करता हूं जिन्हें मैं प्रबंधित कर रहा हूं।
एमी बी

2

मुझे लगता है कि आप जो कर रहे हैं वह ठीक है। मुझे लगता है कि सामान्य तौर पर कोडिंग मानकों पर सहमत होना महत्वपूर्ण है।

उदाहरण के लिए, मैं उदाहरणों, चरों और कक्षाओं के लिए अपरकंसेलकैसेज़ आदि के लिए लोअरमेक्लेसीज़ का उपयोग करता हूँ

कोडिंग मानकों को इस समस्या को दूर करना चाहिए।

जब मैं सक्सेसफुल ओपन सोर्स प्रोग्राम देखता हूं तो उनमें अक्सर कोडिंग मानक होते हैं

http://drupal.org/coding-standards

http://help.joomla.org/content/view/826/125/

http://wiki.rubyonrails.org/rails/pages/CodingStandards

http://lxr.linux.no/linux/Documentation/CodingStyle

कोडिंग मानकों पर सहमत होना आपके लिए इस पर अंतिम लड़ाई होनी चाहिए।

वास्तव में विकिपीडिया प्रविष्टि ( http://en.wikipedia.org/wiki/CamelCase से ) देखें

प्रोग्रामिंग और कोडिंग शैली

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

ये सिफारिशें अक्सर अपरकेमसेलकैसे और लोअरकेमेलकैसे के बीच अंतर करती हैं, आमतौर पर निर्दिष्ट करती हैं कि किस प्रकार का उपयोग विशिष्ट प्रकार की संस्थाओं के लिए किया जाना चाहिए: चर, रिकॉर्ड फ़ील्ड, विधियाँ, प्रक्रियाएँ, प्रकार, आदि।

एक व्यापक रूप से उपयोग की जाने वाली जावा कोडिंग शैली यह बताती है कि अपरकैमेलकैसे का उपयोग कक्षाओं के लिए किया जाता है, और लोअरमेक्सेलकेस का उपयोग उदाहरणों और विधियों के लिए किया जाता है। [१ ९] इस उपयोग को मान्यता देते हुए, कुछ IDE, जैसे कि ग्रहण, CamelCase के आधार पर शॉर्टकट लागू करते हैं। उदाहरण के लिए, एक्लिप्स के कंटेंट असिस्ट फीचर में, कैमलकेस शब्द के सिर्फ ऊपरी अक्षरों को टाइप करने से किसी भी मेल खाने वाले क्लास या मेथड का नाम सुझाया जाएगा (उदाहरण के लिए, "NPE" टाइप करना और कंटेंट असिस्ट करना "NullPointerception" का सुझाव दे सकता है)।

प्रोग्रामिंग के लिए मूल हंगेरियन संकेतन निर्दिष्ट करता है कि "उपयोग प्रकार" (डेटा प्रकार नहीं) के लिए एक लोअरकेस संक्षिप्त नाम अपर वैरिएकसेल में नाम के शेष के साथ, सभी चर नामों को उपसर्ग करना चाहिए; इस तरह के रूप में यह लोअरकैमसेलस का एक रूप है। CamelCase जावा में फ़ाइल नामों के लिए और अमीगा पर्सनल कंप्यूटर के लिए आधिकारिक सम्मेलन है।

Microsoft .NET अन्य प्रकार के पहचानकर्ताओं के लिए मापदंडों और गैर-सार्वजनिक क्षेत्रों और अपरकास्टसेलकैस (उर्फ "पास्कल स्टाइल") के लिए लोअरमेक्लेकस की सिफारिश करता है। [२०]

पायथन ने क्लास के नामों के लिए अपरकैमेलकैसे की सिफारिश की है। [२१]

NIEM रजिस्ट्री के लिए आवश्यक है कि XML डेटा एलिमेंट्स अपरकैमेलकैसे का उपयोग करें और एक्सएमएल एट्रिब्यूट्स लोअरकैमेलकेस का उपयोग करें।

CamelCase नामों के भीतर ऊपरी केस संक्षिप्ताक्षर (मुख्य रूप से समरूप और आरंभिक) को शामिल करने के लिए कोई एकल सम्मेलन नहीं है। अनुमोदन में ऊपरी मामले में पूरा संक्षिप्त नाम शामिल है (जैसे कि "यूटीडीटीपीटीपी कनेक्शन") और ऊपरी मामले में केवल पहला अक्षर छोड़ देना (जैसे कि "यूटाहेटकैपनेक्शन")।

कैमल मामला कंप्यूटिंग में सार्वभौमिक नहीं है। कई आधुनिक प्रोग्रामिंग भाषाओं के उपयोगकर्ता, विशेष रूप से लिस्प और फोर्थ परिवारों में, लगभग हमेशा हाइफ़न का उपयोग करते हैं। कभी-कभी दिए गए कारणों में से ऐसा होता है कि ऐसा करने के लिए अधिकांश कीबोर्ड पर शिफ्टिंग की आवश्यकता नहीं होती है, कि शब्द अलग होने पर अधिक पठनीय होते हैं, और यह कि ऊँट के मामले को केवल मामले-असंवेदनशील या केस-फोल्डिंग भाषाओं में मज़बूती से संरक्षित नहीं किया जा सकता है (जैसे) सामान्य लिस्प, कि, जबकि तकनीकी रूप से एक केस-संवेदी भाषा, कैनोनिकलिज़ (सिलवटों) को अपरकेस के साथ डिफ़ॉल्ट रूप से पहचानता है)।


2

यह एक मजबूत तर्क बनाना संभव है कि उस प्रकार के नाम न केवल हानिरहित हैं, बल्कि अच्छी गुणवत्ता कोड के संकेतक हो सकते हैं।

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

  • सामान्य-उद्देश्य गणनाओं के एक संकेतक को सामान्य-उद्देश्य विधियों में नीचे धकेला जा रहा है: यदि आप एक व्यापार पद्धति में डेटा संरचनाओं का एक मध्यवर्ती हेरफेर करते हैं, उदाहरण के लिए उपयोगकर्ताओं की एक सरणी को काट दिया जाना है, तो आपको दायरे में चर होंगे जैसे नामों के साथ users[]और deduplicatedUsers[]। यदि आप डिडुप्लीकेशन को यूटिलिटी मेथड में ले जाते हैं, तो आप मेथड को कॉल कर सकते हैं Utils.dedup(array), और आप डुप्लीकेटेड ऐरे को deduplicatedArrayया सिर्फ कॉल कर सकते हैं result

  • जावा डिकम्प्रेसर अक्सर एक योजना का उपयोग करते हैं जैसे कि स्थानीय चर नामकरण के लिए (उदाहरण और वर्ग चर सामान्य रूप से बाइटकोड में उपलब्ध हैं, लेकिन स्थानीय चर नहीं हैं), और परिणाम आपकी अपेक्षा से अधिक पठनीय हैं, वास्तव में अक्सर अधिक पठनीय है। मूल स्रोत।

  • के देखें लैरी वॉल के सिद्धांत "स्थानीय अस्पष्टता ठीक है" - http://www.wall.org/~larry/natural.html


2

मैं कहूंगा कि जब भी आप कोई वस्तु बनाते हैं तो आपके दिमाग में कुछ विशिष्ट उपयोग होता है। अकेले प्रकार बहुत कम ही उस उपयोग को दर्शाता है।

इसलिए यदि आप अपने एड्रेस बुक एप्लिकेशन में एक नया संपर्क बनाना चाहते हैं, तो आप चर को कॉल करना चाह सकते हैं newContact

और यदि आप अपने कोड का परीक्षण कर रहे हैं Person, तो बिना किसी नाम के ऑब्जेक्ट के व्यवहार की जांच करने के लिए , आप उन्हें unnamedPersonया कुछ इसी तरह से कॉल करना चाह सकते हैं ।

इसे कॉल करना बस personआपके कोड को स्व-दस्तावेजीकरण करने का एक बड़ा मौका देता है।


इसे अनाम कहो! :)) var अनाम = नया व्यक्ति (); या इससे भी बेहतर: var you_know_who = new Person (); :))
वादिम फेरडर

@Vadim फैडरर var he_who_must_not_be_named = new Person();:? :-)
प्लैटिनम एज़्योर

2

केवल अगर आप VB6 में प्रोग्रामिंग कर रहे हैं। उस मामले में , आप जो कर रहे हैं वह अवैध है, लेकिन अनैतिक नहीं।


1

मैं इसे भी करता हूं, और न ही मुझे समझ में आता है कि यह 'अनैतिक' क्यों होना चाहिए। यद्यपि मैं समझ सकता हूं कि यह 'कभी-कभी' भ्रमित करने वाला हो सकता है, लेकिन आज हमारे पास पहचान और वाक्यविन्यास के साथ आईडीई है जो यह सुनिश्चित करेगा कि (यदि आप गलती करते हैं और अपनी कक्षा के बजाय अपने चर का संदर्भ देते हैं, और इसके विपरीत) अपनी त्रुटि को बहुत तेजी से देखें। और हमारे पास कंपाइलर भी है। :)


1

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


1

मुझे लगता है कि आप जिस 'नियम ’के बारे में सोच रहे हैं, वह आदिम प्रकारों के लिए अभिप्रेत है, और वे वर्ग जहाँ कक्षा का नाम खराब चर नाम बनाता है।

उदाहरण के लिए, यदि आप किसी ऑनलाइन स्टोर में किसी विशेष आइटम की लागत की गणना कर रहे हैं, तो निम्न कोड अच्छा रूप नहीं होगा:

Decimal _decimal = item.BaseCost + item.Tax;

इसके बजाय, एक अधिक वर्णनात्मक नाम की सलाह दी जाएगी, जैसे '_total', या '_cost'।


1

इस तरह की चीज़ के साथ एकमात्र मुद्दा जो मैंने पाया है, यदि आप एक निजी सदस्य के लिए एक ही नाम चाहते हैं और एक सार्वजनिक संपत्ति भी।

यदि ये केवल भिन्न होते हैं, तो यह केस-संवेदी भाषाओं जैसे C # में ठीक काम करेगा, लेकिन VB.NET में नहीं।

उदाहरण के लिए, VB में, मैं लिखूंगा

Private _name As String

परंतु

Public Property Name() As String
    Get
        Return _name
    End Get
    Set(ByVal Value As String)
        _name = Value
    End Set
End Property

मैं सी # में भी ऐसा ही करूंगा, ताकि एक से दूसरे में अनुवाद दर्द रहित हो। यह इसे थोड़ा कम त्रुटि-प्रवण बनाता है, क्योंकि यह गलत पढ़ने में बहुत आसान है, या वास्तव में गलत प्रकार के शब्द जो केवल मामले से भिन्न होते हैं।


केवल एक चीज जो मुझे इस दृष्टिकोण के बारे में नापसंद है वह यह है कि एकल अंडरस्कोर के साथ उपसर्ग करने वाले चर एक वर्ग के निजी सदस्यों के साथ जुड़े होते हैं। लेकिन मुझे लगता है कि सामान्य दृष्टिकोण सभ्य है।
जेसन बेकर

हाँ, यह वही है जो मैं यहाँ बता रहा हूँ। एक स्थानीय चर को परिभाषित करना, जैसे कि 'डिम व्यक्ति न्यू पर्सन' के रूप में ठीक होगा। बहुत (बहुत) कभी-कभी वीबी संकलक के साथ, एक अस्पष्टता होती है, और ऑटो-कैपिटलाइज़ेशन के सामान्य आश्वस्त होने से ऐसा नहीं होता है। यह एक अच्छा दृश्य क्यू है जो सब ठीक नहीं है।
क्रिसए

1

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


1

मैं अक्सर Person person = new Person()खुद का इस्तेमाल करता हूं। आमतौर पर जावा / सी # में उपयोग किया जाता है।

हालांकि मैं कल यह सोचकर समाप्त हो गया कि क्यों

private enum DataType {NEW, OLD}

C # में काम नहीं करता है ...

खास तौर पर देख रही है आप कैसे उपयोग कर सकते हैं String, string, Double, double, ... सी # में होगा पर।


enum केवल बाइट, सोबते, शॉर्ट, यूहोर्ट, इंट, यूंट, लॉन्ग, अलॉन्ग का समर्थन करता है। यानी नॉन फ्रैक्शनल न्यूमेरिकल वैल्यू टाइप
केव

1
Person person = new Person()

मेरी किताब में ठीक है

मट्ठा भयानक हो जाता है जब आपके पास होता है:

string Person;
string person;

2 को मिलाना बहुत आसान है।


1

मुझे क्या व्यक्त किया गया है, अन्य तो हमारे कोडिंग मानकों को पूरा नहीं कर रहे हैं, भ्रम को जोड़ने से बच रहे हैं जब कोई और मेरा कोड पढ़ रहा है। मैं, व्यक्तिगत रूप से, इसके साथ कोई समस्या नहीं देखता, जब तक कि अर्थ स्पष्ट हो।

सीएलआर प्रकार (इंट, स्ट्रिंग, आदि) के लिए आप स्ट्रिंग घोषित करने के लिए या तो स्ट्रिंग या स्ट्रिंग (आदि) का उपयोग कर सकते हैं, इसलिए मैं कुछ का उपयोग करने से बचूंगा

int Int = 0;
string String = "hi there";

1

पूँजीकरण को केवल अंतर बनाना खतरनाक है ... एक बड़ी परियोजना के लिए ऐसा करते रहें और मैं गारंटी देता हूँ कि आप विचित्र त्रुटियों में भाग लेंगे, जिन्हें आप पता नहीं लगा सकते।

fastPerson / slowPerson जैसे ऊपर ठीक हैं ... वे वर्णनात्मक हैं और चर प्रकार के नाम से विभेदित हैं ... लेकिन आदमी पर आते हैं, एक "इंट" को बुलाते हुए सादा आलसी होगा।


1

मैं कहूंगा कि यह कभी अनैतिक नहीं है - यह वास्तव में सिर्फ आपकी आधार रेखा चर नाम है। यदि आप एक बेहतर नाम के बारे में नहीं सोच सकते हैं, तो इसे टाइप करने के बाद इसका नामकरण एक अच्छा डिफ़ॉल्ट है। ( केवल जटिल प्रकारों के लिए - इसके प्रकार में निर्मित बुराई के लिए ) और बहुत समय होने पर वास्तव में बेहतर नाम नहीं होता है क्योंकि आप डॉन नहीं होते हैं ' t चर के बारे में और कुछ नहीं जानते। इस विधि के साथ की तरह

void SaveToDatabase(Person person) {...}

केवल एक चीज के बारे में जिसे आप कह सकते person_to_saveहैं कि कोई व्यक्ति ऐसा है या ऐसा कुछ है जो बेमानी लगता है।

हालाँकि, बहुत से मामलों में आप अपने कोड की पठनीयता में सुधार कर सकते हैं, जिसमें व्यक्ति को अधिक वर्णनात्मक नाम दिया जा सकता है। उदाहरण के लिए यह कम वर्णनात्मक है

void AddToAccount(Account account, Person person)  {...}

उसके बाद यह

void AddToAccount(Account account, Person dependent)  {...}

हालाँकि, कृपया, कृपया - सुंदर नाम टाइप के सामने एक 'a' या 't' न रखें। IE 'एक व्यक्ति' के लिए aPerson या 'व्यक्ति' के लिए tPerson। इसकी अत्यधिक जटिल और यदि कोई मूल्य नहीं है तो बहुत कुछ नहीं जोड़ता है। इसके अलावा, आप एक या टी के साथ शुरू होने वाले चर का एक गुच्छा के साथ आपको गुंजाइश प्रदूषित करना शुरू करते हैं जो इंटेली-अर्थ के मूल्य को कम कर सकते हैं।


मैं पिछले पैराग्राफ से सहमत हूं। मुझे किसी मामूली शैली के मुद्दे से बचने के लिए बाहरी पात्रों को जोड़ने का कोई कारण नहीं दिखता है।
जेसन बेकर

0

मैं यह नहीं कहूंगा कि यह भयानक है। मैं आमतौर पर चर के नाम को इस तरह से 'a' के साथ दिखाता हूं कि यह एक प्रकार का उदाहरण है, इसलिए मैं ऐसा नहीं करूंगा

Person aPerson = new Person();

यह कोड को अधिक स्वाभाविक रूप से मेरे विचार से पढ़ा जाता है।


0

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

अंगूठे का मेरा नियम? कोड में कथन सरल अंग्रेजी वाक्यों की तरह पढ़ना चाहिए।

व्यक्ति व्यक्ति = नया व्यक्ति ();

कर्मचारी कर्मचारी = person.getRole (EMPLOYEE);

जनक जनक = person.getRole (PARENT);

person.getFullName ();

employee.getSalary ();

parent.getChildren ();

parent.getFullName (); // खेलने पर डेकोरेटर पैटर्न ग्रहण करना

अगर (person.hasRole (EMPLOYEE)) {

  ...

}

इत्यादि।

यदि चर का दायरा सीमित है (उदाहरण के लिए एन्कैप्सुलेटिंग विधि 10-15 लाइनें है), तो मैं 'व्यक्ति' के बजाय 'p' का उपयोग कर सकता हूं। जब आपके सिर में संदर्भ रखने की कोशिश की जाती है, तो कम चर नाम एक व्याकुलता से कम होते हैं। इस तरह के 'क' या (कंपकंपी) हंगेरियन संकेतन और उसके बाद होने वाले उपद्रवों से बचें। (ध्यान रखें, उपयुक्त संदर्भ में उपयोग किए जाने पर मेरे पास ऐसे उपसर्गों के खिलाफ कुछ भी नहीं है - C ++ / COM / ATL / Win32 एपीआई कोड आदि, जहां यह असाइनमेंट / टाइपकास्टिंग को सीधे रखने में मदद करता है)।

मेरे दो (!) बिट्स :-)

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