C # में निर्देशों का उपयोग करके अप्रयुक्त क्यों निकालें?


120

मुझे आश्चर्य है कि अगर कोई कारण हैं (सोर्स कोड को टिड्ड करने के अलावा) तो डेवलपर्स Usingsविजुअल स्टूडियो 2008 में " अनयूज्ड अनयूज्ड " फीचर का उपयोग क्यों करते हैं ?


मेरा मानना ​​है कि विज़ुअल स्टूडियो के लिए पावरकोमैंड्स की एक विशेषता है, न कि विज़ुअल स्टूडियो की।
होसम ऐली

3
VS2008 में निश्चित रूप से यह एक विशेषता है (वीएस के उपयोगों को छाँटने की क्षमता के साथ)।
रिचर्ड

1
@Hosam: PowerCommands आपको पूरे प्रोजेक्ट / समाधान के लिए सक्षम बनाता है। ऐसा करना प्रति फ़ाइल वीएस की एक विशेषता है।
विन्यासकर्ता

3
BTW, अगर आप इस तरह के क्लीनअप पर अधिक सटीक नियंत्रण चाहते हैं, तो Resharper को देखें।
जॉन फेमिनेला

2
मैं वास्तव में इस सुविधा को नापसंद करता हूं - मैं हमेशा अपने आप को एक फाइल संपादित करता हुआ पाता हूं और किसी के साफ होने के बाद सिस्टम के सभी नामस्थानों को फिर से जोड़ देता हूं (आमतौर पर सिस्टम, System.Collections.Generic, और System.Linq।) मुझे लगता है कि इसे जोड़ता है। अधिक घर्षण से यह बचाता है। अब, आपके अपने प्रोजेक्ट नेमस्पेस को फ्रेमवर्क नेमस्पेस के बजाय - जो आपके प्रोग्राम की वायरिंग को स्पष्ट करने के लिए सफाई करने के लिए अधिक समझ में आता है। काश वीएस को केवल कुछ नामस्थानों से आयात साफ करने का एक तरीका था और सिस्टम वाले को छोड़ दें जिनकी आपको अक्सर आवश्यकता होती है।
user1454265

जवाबों:


186

कुछ कारण हैं जो आप उन्हें बाहर निकालना चाहते हैं।

  • यह व्यर्थ है। उनका कोई मूल्य नहीं है।
  • यह भ्रमित करने वाला है। उस नाम स्थान से क्या उपयोग किया जा रहा है?
  • यदि आप नहीं करते हैं, तो usingसमय के साथ आपका कोड बदलता है , तो आप धीरे-धीरे व्यर्थ बयानों को जमा करेंगे।
  • स्थैतिक विश्लेषण धीमा है।
  • कोड संकलन धीमा है।

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


59
एक अच्छा प्रोग्रामर IS आलसी है, वह काम को अधिकतम करने के लिए नहीं करता है। : डी
निकोलस डोरिएर

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

2
सही है, यह एक बढ़िया लिंक है। मुझे लगता है कि मेरी बात सिर्फ इतनी थी कि हम "खराब आलसी" के बजाय "अच्छा आलसी" चाहते हैं; बाद वाला जहाँ प्रोग्रामर को अच्छा कोड लिखने के लिए परेशान नहीं किया जा सकता है।
एलन

5
साथ ही मानक नाम स्थान छोड़ने की योग्यता है। बड़ी परियोजनाओं और टीमों पर, उन्हें कम संभावित मर्ज संघर्षों में परिणाम, और कोड समीक्षा के लिए कम फ़ाइलों को छोड़कर। इसके अतिरिक्त बहुत सारे डेवलपर चीजों के विस्तार के तरीकों को खोजने के लिए भ्रामक और कठिन जोड़ते हैं, और कभी-कभी इन विस्तार विधियों के लिए आवश्यक नाम स्थान का पता लगाना एक परेशानी है। नए डेवलपर्स अपने कोड फ़ाइलों में शामिल System.Linq के होने के आदी हो सकते हैं, और यह जानने में बहुत समय बर्बाद कर सकते हैं कि मदद मांगने से पहले कुछ खास तरीके क्यों उपलब्ध नहीं हैं।
बजे Ramp51

5
आप उनमें से कुछ को भविष्य के कोडिंग में नर्क के रूप में गूंगा होने से रोकने के लिए रख सकते हैं।
यज्ञप्रो

24

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

कल्पना कीजिए कि आपको 3, 6, 9 महीनों में अपने कोड पर वापस जाना होगा - या किसी और को अपना कोड संभालना होगा और उसे बनाए रखना होगा।

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

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

न घुलनेवाली तलछट


14

यह मुझे एक बहुत ही समझदार सवाल लगता है, जिसका जवाब देने वाले लोगों द्वारा काफी चुटीले अंदाज में व्यवहार किया जा रहा है।

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

मैंने अभी Resharper का उपयोग शुरू किया है, और यह उस परियोजना पर चेतावनी और शैली संकेत देना शुरू कर रहा है जिसके लिए मैं जिम्मेदार हूं। उनमें से निर्देश के उपयोग से निरर्थक को हटाना है, लेकिन निरर्थक योग्यता, पूंजीकरण और कई और अधिक। मेरी आंत वृत्ति कोड को साफ करने और सभी संकेतों को हल करने के लिए है, लेकिन मेरा व्यवसाय प्रमुख मुझे अनुचित परिवर्तनों के खिलाफ चेतावनी देता है।

हम एक स्वचालित निर्माण प्रक्रिया का उपयोग करते हैं, और इसलिए हमारे एसवीएन रिपॉजिटरी में कोई भी परिवर्तन उन परिवर्तनों को उत्पन्न करेगा जो हम परियोजनाओं / बग / मुद्दों से लिंक नहीं कर सकते हैं, और स्वचालित बिल्ड और रिलीज़ को ट्रिगर करेंगे जो पिछले संस्करणों में कोई कार्यात्मक परिवर्तन नहीं पहुंचाते हैं।

यदि हम निरर्थक अर्हताओं को हटाते हैं, तो इससे संभवतः डेवलपर्स को भ्रम हो सकता है क्योंकि हमारे डोमेन और डेटा लेयर्स केवल क्वालिफायर द्वारा विभेदित हैं।

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

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


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

14

पहले से दिए गए कारणों के अलावा, यह अनावश्यक नामकरण संघर्षों को रोकता है। इस फाइल पर विचार करें:

using System.IO;
using System.Windows.Shapes;

namespace LicenseTester
{
    public static class Example
    {
        private static string temporaryPath = Path.GetTempFileName();
    }
}

यह कोड संकलित नहीं करता है क्योंकि दोनों नामस्थान System.IO और System.Windows.Shapes प्रत्येक में पथ नामक एक वर्ग होता है। हम इसे पूर्ण वर्ग पथ का उपयोग करके ठीक कर सकते हैं,

        private static string temporaryPath = System.IO.Path.GetTempFileName();

या हम बस लाइन को हटा सकते हैं using System.Windows.Shapes;


13

Intellisense पॉपअप में कम विकल्प (विशेषकर यदि नामस्थान में बहुत सारी एक्सटेंशन विधियाँ हैं)।

सैद्धांतिक रूप से इंटेलीजेंस भी तेज होना चाहिए।


1
इंटेलीजेंस के लिए +1। यह वास्तव में स्टार्टअप पर धीमा है (मैं नियमित रूप से "बिल्डिंग कैश, बाद में फिर कोशिश करता हूं") देखता हूं, इसलिए यह वास्तव में महत्वपूर्ण हो सकता है। संकलन समय जो हर किसी के बारे में बात करता है ... मैं अभी तक संख्याएं देख रहा हूं।
ल्यूक

5

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


4

यह झूठी परिपत्र निर्भरता को रोकने में भी मदद करता है, यह मानते हुए कि आप अप्रयुक्त प्रतिबंधों को हटाने के बाद अपनी परियोजना से कुछ dll / परियोजना संदर्भों को निकालने में सक्षम हैं।


3

कोड शीघ्रता से संकलन करता है।


5
कोई सबूत मिल गया है कि वापस करने के लिए?
cjk

14
ओह सीके - तुमने मुझे फिर से पकड़ लिया। मैंने झूठ बोला। अनावश्यक पाठ को हटाना वास्तव में कोड को धीमा बनाता है। इसके बारे में सोचें :)
डेड अकाउंट

@ck: मैंने सत्यापित किया है कि एक परियोजना से बयानों का उपयोग करने वाले अप्रयुक्त को हटाने से एक ध्यान देने योग्य राशि से संकलन समय में सुधार होता है। बेशक यह होगा - हार्ड ड्राइव से पढ़ने के लिए कम बाइट्स।
विन्यासकर्ता

19
कुछ वास्तविक आँकड़े देखकर अच्छा लगेगा। यदि हम संकलन करते समय केवल कुछ मिलीसेकंड बचा रहे हैं, तो गति एक सम्मोहक तर्क नहीं है। हालांकि, बयानों का उपयोग करके अनावश्यक हटाने के अन्य कारण हैं।
ग्रेग

3
यह झूठ बोलने या न करने के बारे में नहीं है। कोई भी समझदार लोग अनुमान लगाते हैं कि कम अव्यवस्था का मतलब अधिक दक्षता है। इसे वापस करने के लिए "सबूत" आपकी प्रतिक्रिया के लिए मूल्य प्रदान करना है और इस तर्क का समर्थन करना है कि "तेज" का अर्थ केवल कुछ एमएस नहीं है, लेकिन वास्तव में आपकी परियोजना को तेजी से संकलित करने के लिए एक बेहतर अनुभव है।
मथियस फेलिप

3

हाल ही में मुझे एक और कारण मिला कि अप्रयुक्त आयात को हटाना काफी मददगार और महत्वपूर्ण है।

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

तो यह न केवल क्लीनर पर एक मुद्दा है और कोड को पढ़ने में आसान है, बल्कि उत्पादन-कोड में विधानसभा-संदर्भों को बनाए रखने पर भी है जहां सभी संदर्भित विधानसभाएं मौजूद नहीं हैं

अंत में हमारे निर्वासन में हमें बी और ए को एक साथ भेजना पड़ा, हालांकि बी का उपयोग ए में कहीं भी नहीं किया जाता है, लेकिन इन- usingसेंस में किया जाता है। यह बड़े पैमाने पर प्रभावित करेगा क्रम की -performanceA जब लोड हो रहा है विधानसभा।


2

कम से कम सिद्धांत में, यदि आपको C # .cs फ़ाइल (या कोई एकल प्रोग्राम स्रोत कोड फ़ाइल) दी गई थी, तो आपको उस कोड को देखने और ऐसा वातावरण बनाने में सक्षम होना चाहिए, जो उसकी ज़रूरत की हर चीज़ का अनुकरण करता हो। कुछ संकलन / पार्सिंग तकनीक के साथ आप इसे स्वचालित रूप से करने के लिए एक उपकरण भी बना सकते हैं। यदि यह आपके द्वारा कम से कम मन में किया जाता है, तो आप यह सुनिश्चित कर सकते हैं कि आप कोड फ़ाइल के बारे में सब कुछ समझ सकें।

अब विचार करें, यदि आपको 1000 usingनिर्देशों के साथ एक .cs फ़ाइल दी गई थी, जिसका केवल 10 वास्तव में उपयोग किया गया था। जब भी आप एक प्रतीक को देखते हैं जिसे नए रूप में कोड में पेश किया जाता है जो बाहरी दुनिया का संदर्भ देता है, तो आपको यह पता लगाने के लिए उन 1000 लाइनों से गुजरना होगा कि यह क्या है। यह स्पष्ट रूप से उपरोक्त प्रक्रिया को धीमा कर देता है। इसलिए यदि आप उन्हें 10 तक कम कर सकते हैं, तो इससे मदद मिलेगी!

मेरी राय में, सी # usingनिर्देश बहुत कमजोर है, क्योंकि आप सामान्यता खोए बिना एकल सामान्य प्रतीक निर्दिष्ट नहीं कर सकते हैं, और आप usingएक्सटेंशन विधियों का उपयोग करने के लिए अन्य निर्देशों का उपयोग नहीं कर सकते हैं । यह जावा, पायथन और हास्केल जैसी अन्य भाषाओं में ऐसा नहीं है, उन भाषाओं में जिन्हें आप बाहरी दुनिया से वास्तव में चाहते हैं (लगभग) निर्दिष्ट कर सकते हैं। लेकिन तब, मैं usingजब भी संभव हो, उर्फ का उपयोग करने का सुझाव दूंगा ।

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