मेरी विनम्र राय में, यह आम तौर पर उत्पादन कोड के लिए बड़े पैमाने पर बचने के लिए कुछ है क्योंकि आप आमतौर पर छिटपुट कार्यों को छोड़कर इसे करने के लिए लुभाते नहीं हैं जो असमान कार्य करते हैं। मैं चीजों का परीक्षण करने के लिए उपयोग किए जाने वाले कुछ स्क्रैप कोड में ऐसा करता हूं, लेकिन इसे उत्पादन कोड में करने के लिए कोई प्रलोभन नहीं मिलता है, जहां मैंने पहले से कुछ सोचा है कि प्रत्येक फ़ंक्शन को क्या करना चाहिए, क्योंकि तब से फ़ंक्शन स्वाभाविक रूप से बहुत होगा अपने स्थानीय राज्य के संबंध में सीमित गुंजाइश।
मैंने वास्तव में इस तरह से उपयोग किए जा रहे गुमनाम ब्लॉकों के उदाहरण नहीं देखे हैं (किसी शर्त को शामिल नहीं करना, try
लेनदेन के लिए एक ब्लॉक, आदि) एक फ़ंक्शन में एक सार्थक तरीके से गुंजाइश को कम करने के लिए जो कि सवाल नहीं उठा सकता था कि यह क्यों नहीं हो सकता है अगर यह वास्तव में गुमनाम ब्लॉकों से एक वास्तविक एसई दृष्टिकोण से व्यावहारिक रूप से लाभान्वित हो तो कम स्कोप के साथ सरल कार्यों में आगे विभाजित किया जा सकता है। यह आमतौर पर उदार कोड है जो शिथिल संबंधित या बहुत असंबंधित चीजों का एक गुच्छा कर रहा है जहां हम इसके लिए पहुंचने के लिए सबसे अधिक लुभाते हैं।
एक उदाहरण के रूप में, यदि आप नाम के एक चर का पुन: उपयोग करने के लिए ऐसा करने की कोशिश कर रहे हैं count
, तो यह बताता है कि आप दो विषम चीजों की गिनती कर रहे हैं। यदि चर नाम जितना छोटा होने जा रहा है count
, तो यह मुझे फ़ंक्शन के संदर्भ में टाई करने के लिए समझ में आता है, जो संभवतः एक प्रकार की चीज की गिनती कर सकता है। तो फिर तुम तुरन्त समारोह का नाम और / या दस्तावेज़ देख सकते हैं, को देखने के count
लिए, और तुरन्त पता है कि यह क्या समारोह सभी कोड का विश्लेषण करने के बिना कर रहा है के संदर्भ में इसका मतलब है। मैं अक्सर फ़ंक्शन के लिए एक अच्छा तर्क नहीं खोजता कि दो अलग-अलग चीजों को एक ही चर नाम का उपयोग करने के तरीके को गिनने के लिए जो कि गुमनाम स्कोप / ब्लॉक को विकल्प की तुलना में इतना आकर्षक बनाते हैं। यह सुझाव नहीं है कि सभी कार्यों को केवल एक ही चीज़ को गिनना है। मैं'दो या दो से अधिक चीजों की गणना करने के लिए एक ही चर नाम का पुन: उपयोग करके और प्रत्येक व्यक्ति की गणना के दायरे को सीमित करने के लिए अनाम ब्लॉक का उपयोग करके इंजीनियरिंग लाभ। यदि फ़ंक्शन सरल और स्पष्ट है, तो यह दुनिया का अंत नहीं है कि दो अलग-अलग नाम वाले वैरिएबल हैं जिनमें पहले एक संभवतः आदर्श दृश्यता की कुछ और लाइनें हैं जो आदर्श रूप से आवश्यक हैं। इस तरह के फ़ंक्शंस आम तौर पर त्रुटियों का स्रोत नहीं होते हैं, ऐसे गुमनाम ब्लॉकों की कमी होती है ताकि इसके स्थानीय चर के न्यूनतम दायरे को और भी कम किया जा सके।
सतही तरीकों के लिए सुझाव नहीं
यह आपको केवल गुंजाइश कम करने के लिए जबरदस्ती तरीके बनाने का सुझाव देने के लिए नहीं है। यकीनन यह उतना ही बुरा या बुरा है, और मैं जो सुझाव दे रहा हूं, वह किसी अज्ञात निजी "हेल्पर" तरीकों की जरूरत नहीं है, जो गुमनाम स्कोप की आवश्यकता से अधिक है। यह कोड के बारे में बहुत अधिक सोच रहा है क्योंकि यह अब है और यह सोचने के तरीके की तुलना में चर की गुंजाइश को कम करने के लिए कि कैसे इंटरफ़ेस स्तर पर समस्या को वैचारिक रूप से हल करने के तरीकों से साफ-सुथरी उपज प्राप्त होती है, स्थानीय फ़ंक्शन की कम दृश्यता स्वाभाविक रूप से ब्लॉक के गहरे घोंसले के बिना बताती है। और इंडेंटेशन के 6+ स्तर। मैं ब्रूनो से सहमत हूं कि आप एक फ़ंक्शन में कोड की 3 पंक्तियों को बलपूर्वक हटाकर कोड पठनीयता में बाधा डाल सकते हैं, लेकिन यह इस धारणा से शुरू हो रहा है कि आप अपने मौजूदा कार्यान्वयन के आधार पर आपके द्वारा बनाए जाने वाले कार्यों को विकसित कर रहे हैं, कार्यान्वयन में उलझी बिना कार्यों को डिजाइन करने के बजाय। यदि आप इसे बाद का तरीका करते हैं, तो मुझे अनाम ब्लॉकों की बहुत कम आवश्यकता है जो किसी दिए गए तरीके के भीतर चर दायरे को कम करने से परे कोई उद्देश्य नहीं देते हैं जब तक कि आप किसी भी तरह से हानिरहित कोड की कुछ कम लाइनों द्वारा चर के दायरे को कम करने की कोशिश नहीं कर रहे हैं जहां इन अनाम ब्लॉकों का विदेशी परिचय यकीनन उतना ही बौद्धिक उपरि योगदान देता है जितना वे हटाते हैं।
आगे भी न्यूनतम स्कोप कम करने की कोशिश की जा रही है
यदि स्थानीय वैरिएबल स्कोप को पूर्णतम तक कम करना सार्थक था, तो इस तरह कोड की एक विस्तृत स्वीकृति होनी चाहिए:
ImageIO.write(new Robot("borg").createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())), "png", new File(Db.getUserId(User.handle()).toString()));
... जैसा कि राज्य की न्यूनतम दृश्यता का कारण बनता है, पहली बार में उन्हें संदर्भित करने के लिए चर भी नहीं बना रहा है। मैं हठधर्मिता के रूप में नहीं आना चाहता हूं, लेकिन मुझे लगता है कि व्यावहारिक समाधान अनाम ब्लॉकों से बचने के लिए है जब संभव हो तो बस ऊपर दिए गए कोड की राक्षसी रेखा से बचना है, और यदि वे उत्पादन के संदर्भ से बिल्कुल जरूरी लगते हैं शुद्धता और एक कार्य के भीतर अपरिवर्तनीयता बनाए रखने का परिप्रेक्ष्य, तो मैं निश्चित रूप से सोचता हूं कि आप अपने कोड को कार्यों में कैसे व्यवस्थित कर रहे हैं और अपने इंटरफेस को डिजाइन करना फिर से जांचने योग्य है। स्वाभाविक रूप से यदि आपकी विधि 400 लाइनों की लंबी है और एक चर का दायरा जरूरत से ज्यादा कोड की 300 लाइनों को दिखाई देता है, तो यह एक वास्तविक इंजीनियरिंग समस्या हो सकती है, लेकिन यह जरूरी नहीं है कि अनाम ब्लॉकों के साथ हल करने के लिए एक समस्या है।
यदि और कुछ नहीं, तो सभी जगहों पर अनाम ब्लॉकों का उपयोग करना विदेशी है, मुहावरेदार नहीं है, और विदेशी कोड दूसरों के द्वारा नफरत किए जाने का जोखिम वहन करता है, अगर खुद नहीं तो सालों बाद।
कम करने की गुंजाइश का व्यावहारिक उपयोग
चर के दायरे को कम करने की अंतिम उपयोगिता आपको राज्य प्रबंधन को सही रखने और इसे सही रखने की अनुमति देती है और आपको आसानी से इस बात की अनुमति देती है कि कोई कोडबेस का कोई भी हिस्सा क्या करता है - वैचारिक आक्रमणकारियों को बनाए रखने में सक्षम होने के लिए। यदि किसी एकल फ़ंक्शन का स्थानीय राज्य प्रबंधन इतना जटिल है कि आपको कोड में एक अनाम ब्लॉक के साथ जबरदस्ती गुंजाइश कम करनी होगी जो कि अंतिम रूप देने और अच्छा होने के लिए नहीं है, तो फिर, यह मेरे लिए एक संकेत है कि फ़ंक्शन को फिर से जांचने की आवश्यकता है । यदि आपको किसी स्थानीय फ़ंक्शन दायरे में चर के राज्य प्रबंधन के बारे में तर्क करने में कठिनाई होती है, तो एक संपूर्ण कक्षा के प्रत्येक विधि के लिए सुलभ निजी चर के बारे में तर्क करने की कठिनाई की कल्पना करें। हम उनकी दृश्यता को कम करने के लिए अनाम ब्लॉकों का उपयोग नहीं कर सकते हैं। मेरे लिए यह इस स्वीकृति के साथ शुरू करने में मदद करता है कि चरों का थोड़ा व्यापक दायरा होगा, जिसकी उन्हें आदर्श रूप से कई भाषाओं में आवश्यकता होती है, बशर्ते कि यह उस बिंदु से हाथ से नहीं निकल रहा हो, जहाँ आपको आक्रमणकारियों को बनाए रखने में कठिनाई होगी। यह अनाम ब्लॉकों के साथ इतना हल करने के लिए कुछ नहीं है क्योंकि मैं इसे एक व्यावहारिक दृष्टिकोण से स्वीकार करता हूं।