जब भी संभव हो ऐसा करना आम तौर पर एक अच्छी बात है, लेकिन मैं इस तरह के काम को "कदम" के रूप में नहीं, बल्कि उप-मुखौटे के रूप में सोचना पसंद करता हूं ।
एक सबटैक काम की एक विशिष्ट इकाई है जिसे किया जा सकता है: इसमें एक विशिष्ट जिम्मेदारी है, और परिभाषित इनपुट (एस) और आउटपुट (एस) ( एसओएल में "एस" के बारे में सोचें )। एक उप-योग को फिर से उपयोग करने की आवश्यकता नहीं है: कुछ लोग सोचते हैं "मुझे कभी भी इसे किसी और चीज़ से नहीं बुलाना होगा इसलिए इसे फ़ंक्शन के रूप में क्यों लिखें?" लेकिन यह एक गिरावट है।
मैं लाभ को भी रेखांकित करने की कोशिश करूंगा और यह भी कि यह नेस्टेड फ़ंक्शन (क्लोजर) बनाम क्लास में केवल एक अन्य फ़ंक्शन पर कैसे लागू होता है। आम तौर पर, मैं अनुशंसा करता हूं कि जब तक आपको विशेष रूप से एक की आवश्यकता न हो, तब तक क्लोजर का उपयोग न करें (कई उपयोग हैं, लेकिन कोड को तार्किक विखंडू में अलग करना उनमें से एक नहीं है)।
पठनीयता।
प्रक्रियात्मक कोड की 200+ पंक्तियों (एक फ़ंक्शन का शरीर) को पढ़ना मुश्किल है। 2-20 लाइन फ़ंक्शन को पढ़ना आसान है। कोड मनुष्यों के लिए है।
नेस्टेड या नहीं, आपको ज्यादातर पठनीयता का लाभ मिलता है, जब तक कि आप पैरेंट स्कोप से बहुत सारे वैरिएबल का उपयोग नहीं कर रहे हों, ऐसे में इसे पढ़ना उतना ही मुश्किल हो सकता है।
चर दायरे को सीमित करें
एक अन्य फ़ंक्शन होने से आपको चर दायरे को सीमित करने के लिए मजबूर किया जाता है, और विशेष रूप से आपको जो भी आवश्यक है उसे पास करना होगा।
यह अक्सर आपको संरचना कोड को भी बेहतर बनाता है, क्योंकि यदि आपको पहले "चरण" से किसी प्रकार के राज्य चर की आवश्यकता होती है, तो आप वास्तव में वास्तव में एक और उपटैब पा सकते हैं जो उस मूल्य को प्राप्त करने के लिए पहले लिखा और निष्पादित किया जाना चाहिए। या दूसरे शब्दों में, कोड के अत्यधिक-युग्मित विखंडू को लिखना कठिन हो जाता है।
नेस्टेड फ़ंक्शन होने से आप नेस्टेड फ़ंक्शन (क्लोजर) के अंदर से पैरेंट स्कोप में वैरिएबल एक्सेस कर सकते हैं। यह बहुत उपयोगी हो सकता है, लेकिन यह सूक्ष्म, कठिन-से-ज्ञात बग को भी जन्म दे सकता है क्योंकि फ़ंक्शन का निष्पादन उस तरह से नहीं हो सकता है जिस तरह से लिखा गया है। यह तब और भी अधिक होता है जब आप पैरेंट स्कोप में वेरिएबल को संशोधित करते हैं (एक बहुत बुरा विचार, आम तौर पर)।
यूनिट परीक्षण
प्रत्येक उपटैब, एक फ़ंक्शन (या यहां तक कि एक वर्ग) लागू किया गया एक स्टैंड-अलोन, कोड का परीक्षण योग्य टुकड़ा है। यूनिट परीक्षण और टीडीडी के लाभ कहीं और प्रलेखित हैं।
नेस्टेड फ़ंक्शन / क्लोजर का उपयोग करना यूनिट परीक्षण की अनुमति नहीं देता है। मेरे लिए, यह एक डील-ब्रेकर है और इसका कारण यह है कि आपको बस एक और कार्य करना चाहिए, जब तक कि किसी बंद होने की कोई विशिष्ट आवश्यकता न हो।
एक टीम / टॉप-डाउन डिज़ाइन पर काम करना
उपशीर्षक अलग-अलग लोगों द्वारा लिखे जा सकते हैं, स्वतंत्र रूप से, यदि आवश्यक हो।
यहां तक कि अपने आप से, यह उपयोगी हो सकता है जब कोड लिखना बस कुछ उपटैब आह्वान करना है जो अभी तक मौजूद नहीं है, मुख्य कार्यक्षमता का निर्माण करते समय, और वास्तव में सबटैक को लागू करने के बारे में चिंता करें जब आप जानते हैं कि यह आपको उन परिणामों को प्राप्त करने जा रहा है जिनकी आपको आवश्यकता है सार्थक रास्ता। इसे टॉप-डाउन डिज़ाइन / प्रोग्रामिंग भी कहा जाता है।
कोड पुन: उपयोग
ठीक है, इसलिए जो मैंने पहले कहा था, उसके बावजूद, कभी-कभी वास्तव में एक कारण होता है कि बाद में किसी और चीज के लिए एक उपमा का फिर से उपयोग करना। मैं "आर्किटेक्चर एस्ट्रोनॉट" -वाद की वकालत बिल्कुल नहीं कर रहा हूं, लेकिन सिर्फ इतना है कि शिथिल-युग्मित कोड लिखकर, आप बाद में फिर से उपयोग करने से लाभान्वित हो सकते हैं।
अक्सर उस री-यूज़ का मतलब कुछ रिफैक्टिंग होता है, जो पूरी तरह से अपेक्षित होता है, लेकिन इनपुट मापदंडों को एक छोटे से स्टैंडअलोन फ़ंक्शन पर रिफैक्ट करना MUCH होता है, जो 200+ लाइन फंक्शन वाले महीनों से इसे लिखे जाने के बाद निकालने से ज्यादा आसान होता है, जो कि वास्तव में यहाँ मेरी बात है।
यदि आप एक नेस्टेड फ़ंक्शन का उपयोग करते हैं, तो इसे फिर से उपयोग करना आम तौर पर एक अलग फ़ंक्शन को फिर से चालू करने का मामला है, जो फिर से है, यही कारण है कि मैं तर्क देता हूं कि नेस्टेड जाने का तरीका नहीं है।