2009-11-25 16 views
22

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

इसके लिए मेरा तर्क भी है क्योंकि कई बार मैं एक विधि को दो या तीन मान वापस लेना चाहता हूं, लेकिन यह निश्चित रूप से संभव नहीं है। इस प्रकार यह केवल उदाहरण चर का उपयोग करना आसान लगता है और कभी भी चिंता न करें क्योंकि वे कक्षा में सार्वभौमिक हैं।

धन्यवाद और खेद है अगर मैंने भ्रमित तरीके से लिखा था।

+0

क्या आपको अन्य कक्षाओं को परिभाषित करने की अनुमति है? –

उत्तर

4

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

8

अपनी कक्षा की मूल अवधारणा होने पर इंस्टेंस चर का उपयोग करें। यदि आप पुनरावृत्ति कर रहे हैं, कुछ प्रसंस्करण कर रहे हैं या कर रहे हैं, तो स्थानीय चर का उपयोग करें।

जब आपको एक ही स्थान पर दो (या अधिक) चर का उपयोग करने की आवश्यकता होती है, तो अब उन विशेषताओं (और उन्हें सेट करने के लिए उचित साधन) के साथ एक नई कक्षा बनाने का समय होता है। यह आपके कोड क्लीनर को बनाएगा और आपको समस्याओं के बारे में सोचने में मदद करेगा (प्रत्येक वर्ग आपकी शब्दावली में एक नया शब्द है)।

एक चर को एक मूल अवधारणा के रूप में एक वर्ग बनाया जा सकता है। उदाहरण के लिए असली दुनिया पहचानकर्ता: इन्हें स्ट्रिंग्स के रूप में प्रदर्शित किया जा सकता है, लेकिन अक्सर, यदि आप उन्हें अपने स्वयं के ऑब्जेक्ट में समाहित करते हैं तो वे अचानक "आकर्षक" कार्यक्षमता (सत्यापन, अन्य ऑब्जेक्ट्स के साथ सहयोग आदि) शुरू करते हैं

इसके अलावा (पूरी तरह से संबंधित नहीं) वस्तु स्थिरता है - एक वस्तु यह सुनिश्चित करने में सक्षम है कि यह राज्य समझ में आता है। एक संपत्ति को सेट करना दूसरे को बदल सकता है। यह आपके प्रोग्राम को थ्रेड-सुरक्षित होने के बाद भी बदलना आसान बनाता है (यदि आवश्यक हो)।

3

विधियों के लिए आंतरिक स्थानीय चर हमेशा से पसंद किए जाते हैं, क्योंकि आप प्रत्येक चर के दायरे को जितना संभव हो सके रखना चाहते हैं। लेकिन यदि एक से अधिक तरीकों को एक चर का उपयोग करने की आवश्यकता है, तो यह एक आवृत्ति चर होना होगा।

स्थानीय चर किसी परिणाम तक पहुंचने या फ्लाई पर कुछ गणना करने के लिए उपयोग किए जाने वाले मध्यवर्ती मूल्यों की तरह अधिक हैं। इंस्टेंस वैरिएबल आपकी आयु या नाम जैसी कक्षा के गुणों की तरह अधिक हैं।

1

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

2

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

मुझे एक से अधिक मूल्य वापस एक सरणी या ऑब्जेक्ट की तरह एक समग्र संरचना को वापस करने की आवश्यकता है।

2

आसान तरीका: यदि चर को एक से अधिक तरीकों से साझा किया जाना चाहिए, तो उदाहरण चर का उपयोग करें, अन्यथा स्थानीय चर का उपयोग करें।

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

1

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

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

33

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

आइए केवल उदाहरण चरों को आजमाएं और प्रयोग करें क्योंकि आप कार्यों को लिखने का सुझाव देते हैं। मैं एक बहुत ही सरल वर्ग पैदा हो जाएगी:

public class BadIdea { 
    public Enum Color { GREEN, RED, BLUE, PURPLE }; 
    public Color[] map = new Colors[] { 
     Color.GREEN, 
     Color.GREEN, 
     Color.RED, 
     Color.BLUE, 
     Color.PURPLE, 
     Color.RED, 
     Color.PURPLE }; 

    List<Integer> indexes = new ArrayList<Integer>(); 
    public int counter = 0; 
    public int index = 0; 

    public void findColor(Color value) { 
     indexes.clear(); 
     for(index = 0; index < map.length; index++) { 
     if(map[index] == value) { 
      indexes.add(index); 
      counter++; 
     } 
     } 
    } 

    public void findOppositeColors(Color value) { 
     indexes.clear(); 
     for(index = 0; i < index < map.length; index++) { 
     if(map[index] != value) { 
      indexes.add(index); 
      counter++; 
     } 
     } 
    } 
} 

यह एक मूर्खतापूर्ण कार्यक्रम मैं जानता हूँ कि है, लेकिन हम अवधारणा है कि चीजों के लिए उदाहरण चर का उपयोग कर की तरह यह एक काफी बुरा विचार है वर्णन करने के लिए उपयोग कर सकते हैं। सबसे बड़ी बात यह है कि आप पाएंगे कि वे विधियां हमारे पास मौजूद सभी इंस्टेंस चर का उपयोग करती हैं। और यह हर बार इंडेक्स, काउंटर, और इंडेक्स को संशोधित करता है जब उन्हें बुलाया जाता है। पहली समस्या जो आपको मिलेगी वह यह है कि उन तरीकों को कॉल करने के बाद एक दूसरे के बाद पूर्व रनों के उत्तरों को संशोधित कर सकता है।

BadIdea idea = new BadIdea(); 
idea.findColor(Color.RED); 
idea.findColor(Color.GREEN); // whoops we just lost the results from finding all Color.RED 

के बाद से findColor उदाहरण चर का उपयोग करता लौटे मानों को ट्रैक करने में हम केवल एक समय में एक परिणाम लौट सकते हैं: उदाहरण के लिए, यदि आप निम्नलिखित कोड लिखा था। !? के लिए प्रयास करें और इससे पहले कि हम फिर से इसे कहते उन परिणामों के लिए एक संदर्भ बंद सहेजने दें: इस दूसरे उदाहरण में

BadIdea idea = new BadIdea(); 
idea.findColor(Color.RED); 
List<Integer> redPositions = idea.indexes; 
int redCount = idea.counter; 
idea.findColor(Color.GREEN); // this causes red positions to be lost! (i.e. idea.indexes.clear() 
List<Integer> greenPositions = idea.indexes; 
int greenCount = idea.counter; 

हम 3 लाइन पर लाल पदों को बचाया है, लेकिन एक ही बात हुआ क्यों हम उन्हें खो थी ?! क्योंकि विचार.इंडेक्स को आवंटित करने के बजाए साफ़ कर दिया गया था, इसलिए एक समय में केवल एक ही जवाब इस्तेमाल किया जा सकता है। इसे फिर से कॉल करने से पहले आपको उस परिणाम का उपयोग करके पूरी तरह समाप्त करना होगा। एक बार फिर आप एक विधि को कॉल करने के बाद परिणाम साफ़ कर दिए जाते हैं और आप सबकुछ खो देते हैं। इसे ठीक करने के लिए आपको प्रत्येक बार एक नया परिणाम आवंटित करना होगा ताकि लाल और हरे रंग के उत्तर अलग हों। तो चलिए चीजों की नई प्रतियां बनाने के लिए हमारे उत्तरों को क्लोन करें:

BadIdea idea = new BadIdea(); 
idea.findColor(Color.RED); 
List<Integer> redPositions = idea.indexes.clone(); 
int redCount = idea.counter; 
idea.findColor(Color.GREEN); 
List<Integer> greenPositions = idea.indexes.clone(); 
int greenCount = idea.counter; 

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

यह भी ध्यान दें कि कॉलर को परिणामों को याद रखने के लिए स्थानीय चर का उपयोग करना है, जबकि आपने BadIdea के तरीकों में स्थानीय चर का उपयोग नहीं किया है, तो कॉलर को परिणामों को याद रखने के लिए उनका उपयोग करना होगा। तो आप वास्तव में क्या हासिल किया? आपने वास्तव में समस्या को कॉलर को और अधिक करने के लिए मजबूर कर दिया। और जिस कॉलर को आपने कॉलर पर धक्का दिया है वह पालन करने का एक आसान नियम नहीं है क्योंकि नियम के कुछ अपवाद हैं।

अब दो अलग-अलग तरीकों से ऐसा करने का प्रयास करें। ध्यान दें कि मैं "स्मार्ट" कैसे रहा हूं और मैंने "स्मृति को बचाने" के लिए वही इंस्टेंस चर का पुन: उपयोग किया और कोड कॉम्पैक्ट रखा। ;-)

BadIdea idea = new BadIdea(); 
idea.findColor(Color.RED); 
List<Integer> redPositions = idea.indexes; 
int redCount = idea.counter; 
idea.findOppositeColors(Color.RED); // this causes red positions to be lost again!! 
List<Integer> greenPositions = idea.indexes; 
int greenCount = idea.counter; 

वही बात हुई! अरे, लेकिन मैं इतना "स्मार्ट" और स्मृति की बचत कर रहा था और कोड कम संसाधनों का उपयोग करता है !!! यह आवृत्ति चर का उपयोग करने का असली जोखिम है जैसे कि कॉलिंग विधियां अब ऑर्डर निर्भर हैं। यदि मैं विधि कॉल के आदेश को बदलता हूं तो परिणाम अलग-अलग होते हैं, भले ही मैंने वास्तव में BadIdea की अंतर्निहित स्थिति को नहीं बदला है। मैंने मानचित्र की सामग्री को नहीं बदला है। विभिन्न तरीकों से विधियों को कॉल करते समय कार्यक्रम अलग-अलग परिणाम क्यों देता है?

idea.findColor(Color.RED) 
idea.findOppositeColors(Color.RED) 

अगर मैं उन दो तरीकों बदली तुलना में एक अलग परिणाम का उत्पादन:

idea.findOppositeColors(Color.RED) 
idea.findColor(Color.RED) 

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

और यह केवल एकल थ्रेडेड समस्याओं को देखता है। यदि BadIdea का उपयोग बहु-थ्रेडेड स्थिति में किया जा रहा था तो त्रुटियां वास्तव में विचित्र हो सकती हैं। क्या होता है यदि FindColors() और findOppositeColors() को एक ही समय में बुलाया जाता है? क्रैश, आपके सभी बाल गिर जाते हैं, मौत, अंतरिक्ष और समय एकवचन में पतन हो जाता है और ब्रह्मांड निगल जाता है? शायद उनमें से कम से कम दो। थ्रेड शायद आपके सिर से ऊपर हैं, लेकिन उम्मीद है कि हम आपको बुरी चीजें करने से दूर ले जा सकते हैं, इसलिए जब आप धागे को प्राप्त करते हैं तो उन बुरे प्रथाओं से आपको वास्तविक दिल का दर्द नहीं होता है।

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

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

आइए स्थानीय चर का उपयोग कर रीराइट:

public class GoodIdea { 
    ... 

    public List<Integer> findColor(Color value) { 
     List<Integer> results = new ArrayList<Integer>(); 
     for(int i = 0; i < map.length; i++) { 
     if(map[index] == value) { 
      results.add(i); 
     } 
     } 
     return results; 
    } 

    public List<Integer> findOppositeColors(Color value) { 
     List<Integer> results = new ArrayList<Integer>(); 
     for(int i = 0; i < map.length; i++) { 
     if(map[index] != value) { 
      results.add(i); 
     } 
     } 
     return results; 
    } 
} 

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

public class Pair<K,T> { 
    public K first; 
    public T second; 

    public Pair(K first, T second) { 
     this.first = first; 
     this.second = second; 
    } 
} 

लांग जवाब है, लेकिन एक बहुत महत्वपूर्ण विषय।

0

आम तौर पर चर के न्यूनतम स्कोप होना चाहिए।

दुर्भाग्यवश, कम से कम परिवर्तनीय दायरे वाले वर्गों को बनाने के लिए, अक्सर एक विधि पैरामीटर पास करने की आवश्यकता होती है।

लेकिन यदि आप हर समय उस सलाह का पालन करते हैं, तो वेरिएबल स्कोप को पूरी तरह से कम करते हैं, तो आप विधियों में और बाहर पारित सभी आवश्यक वस्तुओं के साथ बहुत सारी अनावश्यकता और विधि लचीलापन के साथ समाप्त हो सकते हैं।

चित्र इस तरह के तरीकों के हजारों के साथ एक कोड बेस:

private OneReallyBigClassThatHoldsCertainThings big; 
private OneMediumSizedClassThatHoldsCertainThings medium; 
private AnotherClassThatDoesLittle little; 
private ClassThatHoldsReturnInfo ret; 

private void foo() { 
    LocalClassObjectJustUsedHere here; 
    .... 
} 
private void bar() { 
    .... 
} 

कोड के रूप में:

private ClassThatHoldsReturnInfo foo(OneReallyBigClassThatHoldsCertainThings big, 
AnotherClassThatDoesLittle little) { 
    LocalClassObjectJustUsedHere here; 
      ... 
} 
private ClassThatHoldsReturnInfo bar(OneMediumSizedClassThatHoldsCertainThings medium, 
AnotherClassThatDoesLittle little) { 
    ... 
} 

और, दूसरे हाथ पर, इस तरह उदाहरण चर के बहुत सारे के साथ एक कोड बेस कल्पना बढ़ता है, पहला तरीका वैरिएबल स्कोप को कम से कम कर सकता है, लेकिन आसानी से चारों ओर पारित होने वाले कई विधि पैरामीटर का कारण बन सकता है। कोड आमतौर पर अधिक वर्बोज़ होगा और यह एक जटिलता का कारण बन सकता है क्योंकि इन सभी तरीकों को एक रिफैक्टर करता है।

अधिक आवृत्ति चर का उपयोग करने से कई प्रकार के विधि पैरामीटर की जटिलता कम हो सकती है और जब आप अक्सर स्पष्टता के तरीकों को पुनर्गठित करते हैं तो तरीकों के लिए लचीलापन दे सकते हैं। लेकिन यह अधिक ऑब्जेक्ट स्टेटस बनाता है जिसे आपको बनाए रखना है। आम तौर पर सलाह पूर्व को करने और उत्तरार्द्ध से बचना है।

हालांकि, अक्सर, और यह व्यक्ति पर निर्भर हो सकता है, कोई भी पहले मामले के हजारों अतिरिक्त ऑब्जेक्ट संदर्भों की तुलना में राज्य जटिलता को आसानी से प्रबंधित कर सकता है। कोई यह देख सकता है जब विधियों के भीतर व्यापार तर्क बढ़ता है और संगठन को आदेश और स्पष्टता रखने के लिए बदलने की जरूरत होती है।

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

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

मुझे लगता है कि इस युवा प्रोग्रामर के पास कम रखरखाव कोड के लिए कुछ अंतर्दृष्टिपूर्ण पहला प्रभाव है।

0

उपयोग उदाहरण चर जब

  1. 2 तो कक्षा में कार्यों एक ही मूल्य की जरूरत है तो यह उदाहरण चर या
  2. राज्य यह उदाहरण चर बनाने के बदलने की उम्मीद नहीं है, तो कर सकते हैं। उदाहरण: अपरिवर्तनीय वस्तु, डीटीओ, लिंक्डलिस्ट, अंतिम चर वाले या
  3. यदि यह एक अंतर्निहित डेटा है जिस पर कार्रवाई की जाती है। उदाहरण के लिए: आगमन PriorityQueue.java स्रोत कोड में [] में अंतिम या
  4. यहां तक ​​कि अगर यह प्रयोग किया जाता है केवल एक बार & & राज्य, बदल यह उदाहरण है अगर यह एक समारोह जिसका पैरामीटर सूची होना चाहिए द्वारा केवल एक बार प्रयोग किया जाता है करने की उम्मीद है खाली। उदाहरण: HTTPCookie.java रेखा: 860 हैशकोड() फ़ंक्शन 'पथ चर' का उपयोग करता है।

इसी तरह स्थानीय परिस्थितियों का उपयोग करें जब इनमें से कोई भी स्थिति मेल नहीं खाती है, तो विशेष रूप से चर की भूमिका समाप्त हो जाती है, जिसके बाद स्टैक पॉप हो जाता है। उदाहरण: Comparator.compare (ओ 1, ओ 2);

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