params
कीवर्ड के साथ एक खतरा यह है, अगर कॉल के बाद विधि को कोडित किया गया है,
- किसी ने गलती से / जानबूझकर विधि हस्ताक्षर से एक / अधिक आवश्यक पैरामीटर हटा दिया है , और
- हस्ताक्षर परिवर्तन से पहले पैरामीटर के तुरंत पहले एक / अधिक आवश्यक पैरामीटर, पैरामीटर के
params
साथ टाइप-संगत थे params
,
उन कॉल्स को पहले से आवश्यक पैरामीटर्स को वैकल्पिक params
पैरामीटर के रूप में मानने के लिए एक / अधिक एक्सप्रेशन के साथ संकलित करना जारी रहेगा । मैं सिर्फ इस सबसे खराब स्थिति में भाग गया: params
पैरामीटर प्रकार का था object[]
।
यह उल्लेखनीय है क्योंकि डेवलपर्स का उपयोग कंपाइलर के साथ उनकी कलाई को थप्पड़ मारने के लिए किया जाता है, बहुत अधिक सामान्य परिदृश्य जहां पैरामीटर सभी आवश्यक पैरामीटर के साथ एक विधि से हटा दिए जाते हैं (क्योंकि # पैरामीटर की उम्मीद थी कि परिवर्तन होगा)।
मेरे लिए, यह शॉर्टकट के लायक नहीं है। (Type)[]
बिना params
ओवरराइड की आवश्यकता के बिना पैरामीटर्स के 0 से अनंत के साथ काम करेंगे। सबसे खराब स्थिति यह है कि आपको उन , new (Type) [] {}
कॉल में जोड़ना होगा जहां यह लागू नहीं होता है।
Btw, imho, सबसे सुरक्षित (और सबसे पठनीय अभ्यास) निम्नलिखित है:
नामांकित पैरामीटर्स से गुजरें (जो कि अब हम VB; P में कर सकते हैं, उसके बाद C # ~ 2 दशकों में भी कर सकते हैं ) (क्योंकि:
1.1। यह एकमात्र तरीका है जो पैरामीटर आदेश, संगत-प्रकार और / या गिनती बदलने के बाद पैरामीटर के लिए पारित अनपेक्षित मूल्यों की रोकथाम की गारंटी देता है ,
1.2। यह पैरामीटर अर्थ बदलने के बाद उन अवसरों को कम कर देता है , क्योंकि नए अर्थ को दर्शाने वाले संभावित नए पहचानकर्ता का नाम उसके पास दिए जा रहे मूल्य के ठीक बगल में है,
1.3। यह अल्पविराम की गणना करने और कॉल से हस्ताक्षर करने के लिए आगे पीछे कूदने से बचता है यह देखने के लिए कि क्या पैरामीटर के लिए अभिव्यक्ति पारित की जा रही है, और
1.3.1। वैसे, अकेले इस कारण होना चाहिए बहुत सारे (सूखी सिद्धांत के लगातार त्रुटि प्रवण उल्लंघन से बचने के बस के मामले में पढ़ कोड भी उल्लेख करने के लिए नहीं संशोधित यह), लेकिन इस कारण हो सकता है तेजी से और अधिक महत्वपूर्ण अगर वहाँ एक हैं / अधिक एक्सप्रेशंस पारित किया जा रहा है कि स्वयं में अल्पविराम होते हैं, यानी मल्टी-डायमेंशनल एरे रेफ या मल्टी-पैरामीटर फंक्शन कॉल्स। उस स्थिति में, आप उपयोग भी नहीं कर सकते थे (यदि आप कर सकते थे, तब भी प्रति पद्धति कॉल में प्रति पैरामीटर एक अतिरिक्त कदम जोड़ रहे होंगे ) आपके लिए अल्पविराम की गणना करने के लिए अपने संपादक में एक चयन सुविधा में सभी अवसरों का पता लगाएं।
1.4। यदि आपको वैकल्पिक पैरामीटर ( params
या नहीं) का उपयोग करना चाहिए , तो यह आपको उन कॉलों की खोज करने की अनुमति देता है जहां एक विशेष वैकल्पिक पैरामीटर पास किया जाता है (और इसलिए, सबसे अधिक संभावना नहीं है या कम से कम डिफ़ॉल्ट मान नहीं होने की संभावना है),
(नोट: कारण 1.2। और 1.3। कॉल को पढ़ने और / या बदले जाने का उल्लेख नहीं करने के लिए प्रारंभिक कॉल को कोड करने पर भी आसानी से त्रुटि की संभावना को कम कर सकते हैं।)
तथा
ऐसा एक - PARAMETER - प्रति - बेहतर पठनीयता के लिए लाइन (क्योंकि:
2.1। यह कम बरबाद है, और
2.2। यह दाएं और पीछे बाएं स्क्रॉल करने से बचता है (और ऐसा करने के लिए लाइन - लाइन करना, क्योंकि अधिकांश नश्वर कई लाइनों के बाएं हिस्से को नहीं पढ़ सकते हैं, दाएं स्क्रॉल करें और दाहिने हिस्से को पढ़ें)।
2.3। यह "बेस्ट प्रैक्टिस" के अनुरूप है, जो हम पहले ही असाइनमेंट स्टेटमेंट के लिए विकसित कर चुके हैं, क्योंकि हर पैरामीटर पास किया गया है एसेनिमेंट स्टेटमेंट (एक स्थानीय चर के लिए एक मान या संदर्भ असाइन करना)। बस जो लोग पालन की तरह नवीनतम शैली कोडिंग में "बेस्ट प्रैक्टिस" प्रत्येक पंक्ति में कई असाइनमेंट वक्तव्य कोडिंग का सपना नहीं होगा एक बार नहीं "बेस्ट प्रैक्टिस" होगा, हम शायद नहीं करना चाहिए (और पकड़ता है मेरी "प्रतिभा" के लिए; पी ) पासिंग पैरामीटर्स के दौरान ऐसा करें।
नोट :
चर में जिनके नाम पैरामीटर्स को दर्शाते हैं, पास होने पर मदद नहीं मिलती है:
1.1। आप साहित्यिक स्थिरांक (यानी एक सरल 0/1, झूठे / सच्चे या अशक्त) में पास हो रहे हैं, यहां तक कि "बेस्ट प्रैक्टिसेज" के लिए आपको नामांकित कॉन्स्टेंट का उपयोग करने की आवश्यकता नहीं हो सकती है और उनके उद्देश्य को आसानी से विधि नाम से नहीं समझा जा सकता ),
1.2। विधि काफी निचले स्तर पर है / इस तरह के कॉलर की तुलना में अधिक सामान्य है कि आप नहीं चाहेंगे / अपने वैरिएबल्स को पैरामीटर्स (या इसके विपरीत) के समान / या नाम देने में सक्षम हों, या
1.3। आप की दोबारा आदेश / हस्ताक्षर कि पहले कॉल अभी भी संकलन क्योंकि प्रकार में हो सकता है में पैरामीटर की जगह हो अभी भी संगत होना।
वीएस जैसे ऑटो-रैप फीचर होने से मैं ऊपर दिए गए 8 कारणों में से केवल एक (# 2.2) को समाप्त करता है। वीएस 2015 के रूप में देर से पहले, यह ऑटो-इंडेंट नहीं किया ((?! वास्तव में, एमएस?!) जो कारण # 2.1 की गंभीरता को बढ़ाता है।
VS में एक विकल्प होना चाहिए जो Named Parameters (पाठ्यक्रम की एक पंक्ति; P) के साथ Method Call snippets उत्पन्न करता है और एक संकलक विकल्प जिसे Named Parameters की आवश्यकता होती है (कॉन्सेप्ट में इसी तरह के विकल्प VB में जो btw, आवश्यकता थी, एक बार सोचा था। समान रूप से अपमानजनक के रूप में, लेकिन अब prolly है आवश्यक द्वारा " 'उत्तम आचरण'")। वास्तव में, " मेरे में वापसदिन ";); 1991 में मेरे करियर के महीनों में, इससे पहले कि मैं नामांकित पैरामीटर के साथ एक भाषा का उपयोग कर रहा था (या यहां तक कि देखा था), मेरे पास विरोधी भेड़चाल था /" बस क्यूज़ आप कर सकते हैं, इसका मतलब आपको नहीं करना चाहिए " / आँख बंद करके "भुना हुआ" के सिरों को काटें "पर्याप्त रूप से किसी को भी ऐसा करने के बिना (इन-लाइन टिप्पणियों का उपयोग करके) अनुकरण करने के लिए। नामांकित पैरामीटर (साथ ही साथ अन्य कीमती सिंटैक्स का उपयोग करने के लिए नहीं" "कीमती" को बचाने के लिए) स्रोत कोड कीस्ट्रोक्स) पंच कार्ड युग का एक अवशेष है जब इनमें से अधिकांश सिंटैक्स शुरू हुए। आधुनिक हार्डवेयर और आईडीई के साथ इसके लिए कोई बहाना नहीं है और बहुत अधिक जटिल सॉफ़्टवेयर जहां पठनीयता बहुत अधिक है, बहुत, बहुतज़्यादा ज़रूरी। "कोड पढ़ा लिखा है की तुलना में अधिक बार पढ़ा जाता है"। जब तक आप गैर-ऑटो-अपडेट किए गए कोड को डुप्लिकेट नहीं कर रहे हैं, तब तक सहेजे गए प्रत्येक कीस्ट्रोक की कीमत तब और अधिक हो सकती है, जब कोई व्यक्ति (यहां तक कि खुद) इसे बाद में पढ़ने की कोशिश कर रहा हो।