मुझे आश्चर्य है कि अगर कोई कारण हैं (सोर्स कोड को टिड्ड करने के अलावा) तो डेवलपर्स Usingsविजुअल स्टूडियो 2008 में " अनयूज्ड अनयूज्ड " फीचर का उपयोग क्यों करते हैं ?
मुझे आश्चर्य है कि अगर कोई कारण हैं (सोर्स कोड को टिड्ड करने के अलावा) तो डेवलपर्स Usingsविजुअल स्टूडियो 2008 में " अनयूज्ड अनयूज्ड " फीचर का उपयोग क्यों करते हैं ?
जवाबों:
कुछ कारण हैं जो आप उन्हें बाहर निकालना चाहते हैं।
usingसमय के साथ आपका कोड बदलता है , तो आप धीरे-धीरे व्यर्थ बयानों को जमा करेंगे।दूसरी ओर, उन्हें छोड़ने के कई कारण नहीं हैं। मुझे लगता है कि आप उन्हें हटाने के प्रयास में खुद को बचा लेंगे। लेकिन अगर आप उस आलसी हैं, तो आपको बड़ी समस्याएं हैं!
मैं इसके विपरीत कहना चाहूंगा - बयानों का उपयोग करते हुए अनावश्यक, अनावश्यक को हटाने के लिए यह बहुत उपयोगी है।
कल्पना कीजिए कि आपको 3, 6, 9 महीनों में अपने कोड पर वापस जाना होगा - या किसी और को अपना कोड संभालना होगा और उसे बनाए रखना होगा।
यदि आपके पास कथन का उपयोग करने की एक लंबी लंबी कपड़े धोने की सूची है जो वास्तव में आवश्यक नहीं है, तो कोड को देखना काफी भ्रामक हो सकता है। क्यों कि उस नामस्थान से कुछ भी उपयोग नहीं किया गया है, वहां इसका उपयोग क्यों किया जा रहा है ??
मैं एक पेशेवर वातावरण में दीर्घकालिक स्थिरता के संदर्भ में अनुमान लगाता हूं, मैं आपके कोड को यथासंभव साफ रखने का सुझाव दूंगा - और इसमें अनावश्यक सामान शामिल करना शामिल है। कम अव्यवस्था कम भ्रम और इस प्रकार उच्च स्थिरता को बराबर करती है।
न घुलनेवाली तलछट
यह मुझे एक बहुत ही समझदार सवाल लगता है, जिसका जवाब देने वाले लोगों द्वारा काफी चुटीले अंदाज में व्यवहार किया जा रहा है।
मैं कहूंगा कि सोर्स कोड में किसी भी बदलाव को उचित ठहराया जाना चाहिए। इन परिवर्तनों में छिपी हुई लागत हो सकती है, और प्रश्न प्रस्तुत करने वाला व्यक्ति इसके बारे में जागरूक होना चाहता था। वे एक व्यक्ति के रूप में "आलसी" कहलाने के लिए नहीं कहते थे, क्योंकि वे एक व्यक्ति की तरह थे।
मैंने अभी Resharper का उपयोग शुरू किया है, और यह उस परियोजना पर चेतावनी और शैली संकेत देना शुरू कर रहा है जिसके लिए मैं जिम्मेदार हूं। उनमें से निर्देश के उपयोग से निरर्थक को हटाना है, लेकिन निरर्थक योग्यता, पूंजीकरण और कई और अधिक। मेरी आंत वृत्ति कोड को साफ करने और सभी संकेतों को हल करने के लिए है, लेकिन मेरा व्यवसाय प्रमुख मुझे अनुचित परिवर्तनों के खिलाफ चेतावनी देता है।
हम एक स्वचालित निर्माण प्रक्रिया का उपयोग करते हैं, और इसलिए हमारे एसवीएन रिपॉजिटरी में कोई भी परिवर्तन उन परिवर्तनों को उत्पन्न करेगा जो हम परियोजनाओं / बग / मुद्दों से लिंक नहीं कर सकते हैं, और स्वचालित बिल्ड और रिलीज़ को ट्रिगर करेंगे जो पिछले संस्करणों में कोई कार्यात्मक परिवर्तन नहीं पहुंचाते हैं।
यदि हम निरर्थक अर्हताओं को हटाते हैं, तो इससे संभवतः डेवलपर्स को भ्रम हो सकता है क्योंकि हमारे डोमेन और डेटा लेयर्स केवल क्वालिफायर द्वारा विभेदित हैं।
यदि मैं एनाक्रोनोमीज़ (यानी एबीसीडी -> एबीडी) के पूंजीकरण के समुचित उपयोग को देखता हूं, तो मुझे इस बात का ध्यान रखना होगा कि रेस्स्पर किसी भी प्रकार की एक्सएमएल फ़ाइलों को रिफ्लेक्टर नहीं करता है जो हम उस संदर्भ वर्ग के नाम का उपयोग करते हैं।
इसलिए, इन संकेतों का पालन करना उतना आसान नहीं है जितना कि यह दिखाई देता है, और सम्मान के साथ व्यवहार किया जाना चाहिए।
पहले से दिए गए कारणों के अलावा, यह अनावश्यक नामकरण संघर्षों को रोकता है। इस फाइल पर विचार करें:
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;।
Intellisense पॉपअप में कम विकल्प (विशेषकर यदि नामस्थान में बहुत सारी एक्सटेंशन विधियाँ हैं)।
सैद्धांतिक रूप से इंटेलीजेंस भी तेज होना चाहिए।
यह झूठी परिपत्र निर्भरता को रोकने में भी मदद करता है, यह मानते हुए कि आप अप्रयुक्त प्रतिबंधों को हटाने के बाद अपनी परियोजना से कुछ dll / परियोजना संदर्भों को निकालने में सक्षम हैं।
कोड शीघ्रता से संकलन करता है।
हाल ही में मुझे एक और कारण मिला कि अप्रयुक्त आयात को हटाना काफी मददगार और महत्वपूर्ण है।
कल्पना कीजिए कि आपके पास दो असेंबली हैं, जहां एक दूसरे को संदर्भित करता है (अब के लिए पहले एक को कॉल करें Aऔर संदर्भित B)। अब जब आपके पास A में कोड है जो B पर निर्भर करता है तो सब कुछ ठीक है। हालाँकि आपकी विकास-प्रक्रिया के कुछ चरणों में आप ध्यान देते हैं कि आपको वास्तव में उस कोड की कोई आवश्यकता नहीं है, लेकिन आप उपयोग-कथन को छोड़ देते हैं जहां यह था। अब आपके पास न केवल एक अर्थहीन- usingअसीमित है, बल्कि एक विधानसभा-संदर्भ भी है Bजिसका उपयोग कहीं भी नहीं किया जाता है, लेकिन अप्रचलित निर्देश में। यह पहली बार संकलन के लिए आवश्यक समय की मात्रा को बढ़ाता है A, जैसा किB इसे भी लोड करना पड़ता है।
तो यह न केवल क्लीनर पर एक मुद्दा है और कोड को पढ़ने में आसान है, बल्कि उत्पादन-कोड में विधानसभा-संदर्भों को बनाए रखने पर भी है जहां सभी संदर्भित विधानसभाएं मौजूद नहीं हैं ।
अंत में हमारे निर्वासन में हमें बी और ए को एक साथ भेजना पड़ा, हालांकि बी का उपयोग ए में कहीं भी नहीं किया जाता है, लेकिन इन- usingसेंस में किया जाता है। यह बड़े पैमाने पर प्रभावित करेगा क्रम की -performanceA जब लोड हो रहा है विधानसभा।
कम से कम सिद्धांत में, यदि आपको C # .cs फ़ाइल (या कोई एकल प्रोग्राम स्रोत कोड फ़ाइल) दी गई थी, तो आपको उस कोड को देखने और ऐसा वातावरण बनाने में सक्षम होना चाहिए, जो उसकी ज़रूरत की हर चीज़ का अनुकरण करता हो। कुछ संकलन / पार्सिंग तकनीक के साथ आप इसे स्वचालित रूप से करने के लिए एक उपकरण भी बना सकते हैं। यदि यह आपके द्वारा कम से कम मन में किया जाता है, तो आप यह सुनिश्चित कर सकते हैं कि आप कोड फ़ाइल के बारे में सब कुछ समझ सकें।
अब विचार करें, यदि आपको 1000 usingनिर्देशों के साथ एक .cs फ़ाइल दी गई थी, जिसका केवल 10 वास्तव में उपयोग किया गया था। जब भी आप एक प्रतीक को देखते हैं जिसे नए रूप में कोड में पेश किया जाता है जो बाहरी दुनिया का संदर्भ देता है, तो आपको यह पता लगाने के लिए उन 1000 लाइनों से गुजरना होगा कि यह क्या है। यह स्पष्ट रूप से उपरोक्त प्रक्रिया को धीमा कर देता है। इसलिए यदि आप उन्हें 10 तक कम कर सकते हैं, तो इससे मदद मिलेगी!
मेरी राय में, सी # usingनिर्देश बहुत कमजोर है, क्योंकि आप सामान्यता खोए बिना एकल सामान्य प्रतीक निर्दिष्ट नहीं कर सकते हैं, और आप usingएक्सटेंशन विधियों का उपयोग करने के लिए अन्य निर्देशों का उपयोग नहीं कर सकते हैं । यह जावा, पायथन और हास्केल जैसी अन्य भाषाओं में ऐसा नहीं है, उन भाषाओं में जिन्हें आप बाहरी दुनिया से वास्तव में चाहते हैं (लगभग) निर्दिष्ट कर सकते हैं। लेकिन तब, मैं usingजब भी संभव हो, उर्फ का उपयोग करने का सुझाव दूंगा ।