2011-05-26 15 views
6

रीशेपर आमतौर पर मुझे सुझाव देता है कि, और मैं अभी भी ऐसा करने का एक अच्छा कारण ढूंढ रहा हूं।क्या मुझे चर के रूप में जितना संभव हो उतना चर घोषित करना चाहिए जहां उनका उपयोग किया जाएगा?

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

int temp; 
foreach (var x in collection) { 
    temp = x.GetValue(); 
    //Do something with temp 
} 

कि

से वास्तव में अलग
foreach (var x in collection) { 
    int temp = x.GetValue(); 
    //... 
} 

मेरा मतलब है, क्योंकि यह आवंटन किया जाता है दूसरा कोड और अधिक महंगा नहीं है है: उस के साथ संबंधित कुछ निम्नलिखित है स्मृति हर बार? या दोनों एक ही हैं? बेशक, लूप समाप्त करने के बाद, दूसरे कोड में कचरा कलेक्टर temp वैरिएबल का ख्याल रखेगा, लेकिन पहले में नहीं ...

उत्तर

5

दूसरे उदाहरण की लागत नगण्य है। केवल अंतर यह है कि पहले उदाहरण में, tempfor लूप के दायरे से बाहर उपलब्ध होगा, और इस प्रकार यह for लूप के अंदर घोषित होने से अधिक लंबा होगा।

आपtemp बाहर for पाश की जरूरत नहीं है, तो यह है कि पाश बाहर घोषित नहीं किया जाना चाहिए। दूसरों की तरह कहा है, प्रदर्शन और स्मृति की तुलना में पठनीयता और शैली यहां खेल रहे हैं।

+0

तो उन दो कोडों के बीच कोई प्रदर्शन अंतर नहीं है? (यह एक 'int' है, लेकिन यह एक और जटिल वर्ग हो सकता है जिसके लिए स्मृति में अधिक जगह की आवश्यकता होगी ...) –

+0

@ ऑस्कर - स्टैक वैरिएबल अनिवार्य रूप से कम प्रारंभिक लागत से अलग हैं। –

+0

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

6

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

यह एक रिफैक्टरिंग लाभ भी है। स्रोत के करीब घोषित करने से बाद में आसानी से प्रतिक्रिया मिलती है।

1

कोई विश्वास नहीं है, मुझे विश्वास है, लेकिन कोडिंग शैली के अधिक। इसकी सी प्रोग्रामिंग शैली इसे दायरे की शुरुआत में घोषित करने के लिए है। यहां और विवरण हैं: Scope of variables in C#

4

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

+0

सहमत हुए। उम्मीद है कि यह सबसे अच्छे कारणों में से एक होगा: ' –

+0

मैं यह स्पष्ट करना चाहता था कि अगर कोई उत्सुक था तो यह संज्ञानात्मक भार को कम क्यों कर सकता है। अन्य डेवलपर्स को इस बारे में ज्यादा सोचना नहीं होगा कि 'temp' कहां इस्तेमाल किया जा रहा है। यह उस चर को संदर्भ देने में मदद करता है। – bowserm

0

मुझे हमेशा एक समारोह, कक्षा इत्यादि के शीर्ष पर अपने चर घोषित करने के लिए सिखाया जाता था। यह पढ़ने में आसान बनाता है।

+3

तब आप किस भाषा का उपयोग कर रहे थे? –

1

पठनीयता के साथ इसकी शैली व्यक्तिगत पसंद की बात है।

बहुत कम भाषाएं/सिस्टम हैं जहां इसका प्रदर्शन पर कोई ध्यान देने योग्य प्रभाव होगा।

मैं इन दो नियमों का पालन करने का प्रयास करता हूं।

कक्षा के सभी मूल विशेषताओं को एक ही स्थान पर एक साथ परिभाषित किया जाना चाहिए। जैसे यदि आप ऑर्डर को संभालने में हैं तो ऑर्डर्नो, कस्टमर्नो, राशि, बिक्री कर इत्यादि को एक साथ परिभाषित किया जाना चाहिए।

सभी तकनीकी विशेषताओं जो कक्षा के आंतरिक यांत्रिकी जैसे कि इटरेटर, झंडे, राज्य varaibles का हिस्सा बनना चाहिए, को अपने उपयोग के करीब परिभाषित किया जाना चाहिए।

या इसे एक अन्य व्यवसाय/बाहरी प्रकार के डेटा को एक स्थान पर परिभाषित करने के लिए, उपयोग के करीब परिभाषित तकनीकी/आंतरिक डेटा।

1

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

सी # शैली जिसे आप अक्सर देखते हैं वह यह है कि चर उस बिंदु पर अस्तित्व में आते हैं जहां उनकी आवश्यकता होती है। यह शैली परिवर्तनीय के अस्तित्व को सीमित करती है और इस मौके को कम करती है कि आप कुछ अन्य चर का आकस्मिक रूप से मतलब कर सकते हैं। मुझे इसे पढ़ने में बहुत आसान लगता है।

आधुनिक सी # युग में, उपयोग के पहले बिंदु पर चर के घोषणापत्र को सबसे अधिक स्पष्ट रूप से फायदेमंद है जब दोनों प्यार और नफरत var सुविधा के साथ संयुक्त हो जाती है। varका उपयोग करना उपयोगी नहीं है जब तक कि आप इसे असाइनमेंट के साथ उपयोग न करें जो संकलक और पाठकों को चर के प्रकार का अनुमान लगाने की अनुमति देता है। var सुविधा पहले उपयोग के साथ घोषणा को प्रोत्साहित करती है।

मुझे, मुझे var पसंद है, और इसलिए आप अनुमान लगा सकते हैं कि मुझे कौन सी कोडिंग शैली पसंद है!

संबंधित मुद्दे

 संबंधित मुद्दे