ध्यान देने वाली बात यह है कि कोड को अक्सर "अलग-अलग" गहराई तक पढ़ा जाता है। यह कोड:
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "abc");
wakeLock.acquire();
"स्किम" करना आसान है। यह 3 कथन है। पहले हम एक के साथ आते हैं PowerManager
। फिर हम एक साथ आते हैं WakeLock
। तब हम acquire
द wakeLock
। मैं प्रत्येक पंक्ति की शुरुआत को देखकर वास्तव में आसानी से देख सकता हूं; सरल चर असाइनमेंट को आंशिक रूप से "Type varName = ..." के रूप में आंशिक रूप से पहचानना आसान है और "..." पर मानसिक रूप से स्किम करें। इसी तरह अंतिम कथन स्पष्ट रूप से असाइनमेंट का रूप नहीं है, लेकिन इसमें केवल दो नाम शामिल हैं, इसलिए "मुख्य जिस्ट" तुरंत स्पष्ट है। अक्सर यह सब मुझे जानना होगा कि क्या मैं जवाब देने की कोशिश कर रहा था "यह कोड क्या करता है?" उच्च स्तर पर।
अगर मैं एक सूक्ष्म बग का पीछा कर रहा हूं जो मुझे लगता है कि यहां है, तो जाहिर है मुझे इस पर अधिक विस्तार से जाना होगा, और वास्तव में "..." याद होगा। लेकिन अलग बयान संरचना मुझे अभी भी एक बार में एक बयान करने में मदद करती है (विशेष रूप से उपयोगी है अगर मुझे प्रत्येक कथन में कही जा रही चीजों के कार्यान्वयन में गहराई से कूदने की आवश्यकता है; जब मैं वापस आती हूं तो मुझे "एक इकाई" पूरी तरह से समझ में आ गई है) और फिर अगले बयान पर आगे बढ़ सकते हैं)।
((PowerManager)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag")
.acquire();
अब यह सब एक बयान है। शीर्ष स्तर की संरचना स्किम-रीड करने के लिए इतनी आसान नहीं है; ओपी के मूल संस्करण में, बिना किसी संरचना के लाइनब्रेक और इंडेंटेशन के, मुझे 3 चरणों के अनुक्रम में इसे डिकोड करने के लिए कोष्ठक को गिनना होगा। यदि कुछ मल्टी-पार्ट एक्सप्रेशंस मेथड कॉल की एक श्रृंखला के रूप में व्यवस्थित होने के बजाय एक-दूसरे के भीतर नेस्टेड हैं, तो यह अभी भी इसी तरह से बाहर आ सकता है, इसलिए मुझे यह भरोसा करने के बारे में सावधान रहना होगा कि बिना कोष्ठक की गिनती के। और अगर मैं इस सब के प्रकल्पित बिंदु के रूप में इंडेंटेशन पर भरोसा करता हूं और अंतिम बात के आगे स्किम करता .acquire()
हूं , तो मुझे अपने आप से क्या कहना है?
हालांकि कभी-कभी, यह वही हो सकता है जो आप चाहते हैं। अगर मैं आपके परिवर्तन को आधे-अधूरे तरीके से लागू करूँ और लिखा:
WakeLock wakeLock =
((PowerManeger)getSystemService(POWER_SERVICE))
.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLockTage");
wakeLock.acquire();
अब यह एक त्वरित स्किम के लिए संचार करता है "एक प्राप्त करें WakeLock
, फिर acquire
यह"। पहले संस्करण की तुलना में भी सरल। यह तुरंत स्पष्ट है कि प्राप्त की गई चीज ए है WakeLock
। यदि प्राप्त करना PowerManager
सिर्फ एक उप-विवरण है जो इस कोड के बिंदु के लिए काफी महत्वहीन है, लेकिन wakeLock
यह महत्वपूर्ण है, तो यह वास्तव में PowerManager
सामान को दफनाने में मदद कर सकता है, इसलिए यदि आप जल्दी से इसे प्राप्त करने की कोशिश कर रहे हैं, तो इसे खत्म करना स्वाभाविक है इस कोड का क्या विचार है। और न नामकरण यह संपर्क करता है कि यह है केवल एक बार इस्तेमाल, और कभी कभी कि क्या महत्वपूर्ण है (यदि शेष गुंजाइश बहुत लंबी है, तो मुझे यह बताने के लिए वह सब पढ़ना होगा कि क्या यह फिर से उपयोग किया जाता है, हालांकि स्पष्ट उप-स्कोप का उपयोग करने से यह पता लगाने का एक और तरीका हो सकता है, यदि आपकी भाषा उनका समर्थन करती है)।
जो लाता है कि यह सब संदर्भ पर निर्भर करता है और आप क्या संवाद करना चाहते हैं। जैसा कि प्राकृतिक भाषा में गद्य लिखने के साथ, हमेशा दिए गए कोड को लिखने के कई तरीके होते हैं जो मूल रूप से सूचना सामग्री के संदर्भ में समान होते हैं। जैसा कि प्राकृतिक भाषा में गद्य लिखने के साथ, आप उनके बीच कैसे चुनते हैं, आमतौर पर "किसी भी स्थानीय चर को खत्म करने जैसे" केवल एक बार होने वाले यंत्रवत नियमों को लागू करने के लिए नहीं होना चाहिए । बल्कि कैसेआप अपने कोड को लिखने के लिए चुनते हैं और कुछ चीजों पर जोर देंगे और दूसरों पर जोर देंगे। आपको उन विकल्पों को सचेत रूप से बनाने का प्रयास करना चाहिए (कई बार तकनीकी कारणों से कम पठनीय कोड लिखने के विकल्प सहित), वास्तव में आप जिस चीज पर जोर देना चाहते हैं, उसके आधार पर। विशेष रूप से इस बारे में सोचें कि उन पाठकों की क्या सेवा की जाएगी, जिन्हें आपके कोड के "जिस्ट" प्राप्त करने की आवश्यकता है (विभिन्न स्तरों पर), क्योंकि यह एक बहुत ही करीब अभिव्यक्ति-दर-अभिव्यक्ति पढ़ने की तुलना में अधिक बार होगा।