P * के साथ फंक्शन पैरामीटर नाम प्रीफ़िक्स करने के क्या लाभ हैं?


22

मैं अक्सर परियोजनाओं (जावा परियोजनाओं और ग्रहण का उपयोग करने वाली टीमों) को देखता हूं जो कि उपसर्ग फ़ंक्शन मापदंडों के साथ हैं p

उदाहरण के लिए

public void filter (Result pResult) ...

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

जवाबों:


34

प्रतीकों के लिए सार्थक उपसर्गों को जोड़ने की प्रथाएं, जैसे कि अच्छी तरह से प्रचारित हंगेरियन नोटेशन , उस समय से पहले की तारीख जब आईडीई मौजूद नहीं थे या बहुत आदिम थे। आज, जब घोषणा के बिंदु को खोजने के लिए एक माउस क्लिक है, तो एक सामान्य उपसर्ग निर्दिष्ट करके, नाम के सबसे कीमती हिस्से को खराब करने का कोई मतलब नहीं है, इसके पहले कुछ अक्षर।


10
सिस्टम हंगेरियन नोटेशन एक भयानक प्रथा है जिसे टाला जाना चाहिए। दूसरी ओर, कुछ ऐप हंगेरियन नोटेशन उपयोगी हो सकते हैं (जैसे असुरक्षित उपयोगकर्ता इनपुट को दुरुपयोग होने से रोकने के लिए)।
केसी कुबैल

7
@ डार्थफेट: यहां तक ​​कि इस तरह की आयु संकेतन सीधे नाम में एक एड-हॉक, मैनुअल प्रकार प्रणाली को लागू करने की कोशिश कर रहा है। बस एक अच्छी स्टेटिक टाइप की हुई भाषा का उपयोग करें और एक वास्तविक प्रकार का सिस्टम ट्रैक चीजें जैसे आपके लिए स्वचालित रूप से होती हैं!
तिखन जेल्विस

1
@WyattBarnett सिस्टम हंगेरियन एक प्रोग्रामर को आधुनिक आईडीई के साथ कोई उपयोगी जानकारी नहीं देता है। एप्लिकेशन हंगेरियन कोड समीक्षाओं में सिरदर्द को कम कर सकते हैं जब वे सही ढंग से लागू होते हैं।
केसी कुबेल

2
@TikhonJelvis सभी भाषाएं टाइप किए गए शब्दों का समर्थन नहीं करती हैं जो दृढ़ता से लागू होते हैं (जैसे C ++ टाइपडेफ़्स )। जो भाषाएं इसका समर्थन करती हैं, उनके लिए आप काफी सही हैं।
केसी कुबैल

4
@ डार्थफेट: C / C ++ में आप इसे केवल एक तत्व के साथ struct/ में लपेट सकते हैं union
मैकीज पाइचोटका

9

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


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

5

मैं केवल एक पैरामीटर उपसर्ग का उपयोग करता हूं जब पैरामीटर का उद्देश्य एक सदस्य चर, जैसे एक निर्माता या एक सेटर को सौंपा जाना होता है।

Paint (newColor) {
  color = newColor;
}

मेरे लिए, मुझे लगता है कि "यह" उपसर्ग का उपयोग करने की तुलना में एक अलग चर नाम का उपयोग करना अधिक स्पष्ट रूप से स्पष्ट है।

अन्य स्थितियों के लिए, मैं एक पैरामीटर का उपयोग करने से बचता हूं जो आसानी से सदस्य चर के साथ भ्रमित हो सकता है।

यदि कोई विधि या वर्ग इतना बड़ा है कि यह बताना कठिन है कि चर का क्या अर्थ है, वास्तविक समाधान यह है कि इसे छोटे तरीकों या वर्गों में विभाजित किया जाए। उपसर्गों का उपयोग करना एक बैंड-सहायता समाधान है जो अंतर्निहित समस्या का समाधान करता है।


व्यक्तिगत रूप से, मैं उस मामले में पैरामीटर का नाम संक्षिप्त करना पसंद करता हूं (जैसे, Paint (clr) { color = clr; })। ... आमतौर पर बहुत अस्पष्टता नहीं है, हालांकि color -> clrविशेष रूप से एक अपवाद हो सकता है।
जस्टिन टाइम -

1

यदि आप प्रत्येक विधि पैरामीटर नाम के साथ उपसर्ग के रूप में 'p' का उपयोग करने के लिए एक मानक बनाते हैं, तो आप विधि पैरामीटर को बाकी विधि बॉडी में आसानी से पहचान सकते हैं।

यह विधि मापदंडों को खोजने के लिए आपका समय बचाता है। आप अपने कोड को आसानी से डीबग कर सकते हैं।


1
यदि आप यह बताने में असमर्थ हैं कि एक पैरामीटर क्या है और क्या नहीं है - तो आपका तरीका संभवतः बुरी तरह से लिखा गया है। शायद यह बहुत लंबा है या बहुत से असंरचित चर का उपयोग करता है? किसी भी तरह से यह अनावश्यक उपसर्गों को जोड़कर संबोधित एक अलग समस्या की तरह लगता है।
याकूबिस्ज़ोन

1

लघु - यह अभ्यास कोड को पढ़ने में कठिन बनाता है।

लंबे समय तक - मैं तर्क दूंगा कि यह एक बुरा अभ्यास है जो केवल अन्य बुरी प्रथाओं का समर्थन करने के लिए उपयोग किया जाता है। आइए एक दो कारणों की जांच करें कि ऐसे उपसर्गों का उपयोग करना क्यों सहायक माना जा सकता है:

  • परिवर्तनशील नामों में टकराव से बचना

    • क्या आपके पैरामीटर के नाम वास्तव में व्यक्त करते हैं कि पैरामीटर क्या हैं? यदि आपके पास एक पैरामीटर और क्लास फ़ील्ड है जो "बिल्कुल समान हैं" तो आपको एक पैरामीटर की आवश्यकता नहीं है।
    • इस मामले में यह केवल कक्षा के निर्माणकर्ताओं के लिए उपसर्गों का उपयोग करने के लिए समझ में आता है जैसे कि हारून के उत्तर में वर्णित नए * उपसर्ग। यह सेटर विधियों जैसे के लिए भी उपयोगी हो सकता है

    public void setHeight(int newHeight) { this.height = newHeight; }

  • विधियाँ बहुत सारे परम लेती हैं, बहुत सारे चर घोषित करती हैं और हम आसानी से भूल सकते हैं कि कौन सा पैरामीटर है।

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

पैरामीटर उपसर्गों को जोड़ने वाले कुछ विशिष्ट मामलों को छोड़कर केवल लक्षणों के साथ मदद करता है और वास्तविक समस्याओं को हल नहीं करता है।


0

मैं iParam के लिए एक प्रशंसक हूँ, और बाहर मापदंडों के लिए oParam। मैं कहता हूँ कि परिवर्तन के लिए cParam, लेकिन यह स्वीकार्य नहीं है


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