कोड फोल्डिंग के बारे में आप कैसा महसूस करते हैं?

विजुअल स्टूडियो पर्यावरण में आप में से उन लोगों के लिए, आप #regions में अपने किसी भी कोड को लपेटने के बारे में कैसा महसूस करते हैं? (या यदि कोई अन्य आईडीई कुछ समान है ...)

0
ro fr bn
आपको पता होना चाहिए कि कब पकड़ना है, पता है कि कब फोल्ड करना है - केनी रोजर्स।
जोड़ा लेखक Mark Ransom, स्रोत

24 उत्तर

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

अन्य प्रकार के तहखाने के लिए, मैं हर समय कार्यों को फोल्ड करता हूं। यदि आप फ़ंक्शन को अच्छी तरह से नाम देते हैं, तो आपको तब तक अंदर देखना नहीं होगा जब तक आप कुछ परीक्षण नहीं कर रहे हों या फिर इसे लिख रहे हों।

0
जोड़ा

मैं टेक्स्टमैट (केवल मैक) का उपयोग करता हूं जिसमें कोड फोल्डिंग है और मुझे यह काम करने के लिए वास्तव में उपयोगी लगता है, मुझे पता है कि मेरा क्या है "GetGet" फ़ंक्शन करता है, मुझे ओह इतनी मूल्यवान स्क्रीन स्पेस की 10 लाइनें लेने की आवश्यकता नहीं है।

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

0
जोड़ा

यह कोडिंग डरावनी के बारे में बात की गई थी।

मेरी व्यक्तिगत धारणा यह है कि वे उपयोगी हैं, लेकिन अतिरिक्त में कुछ भी ज्यादा हो सकता है।

मैं अपने कोड ब्लॉक को ऑर्डर करने के लिए इसका उपयोग करता हूं:
Enumerations
घोषणाएं
कंस्ट्रक्टर्स
तरीके
घटना हैंडलर
गुण

0
जोड़ा
यदि वर्ग फ़ाइल को इसके साथ नेविगेट करना आसान है। आम तौर पर यदि यह एक छोटी कक्षा है तो क्षेत्र मदद नहीं करेंगे, इसलिए मैं उन्हें छोड़ देता हूं।
जोड़ा लेखक Pat, स्रोत
यदि आपके पास 1 संपत्ति है तो आप इसे अभी भी एक क्षेत्र ब्लॉक में लपेटें? :(
जोड़ा लेखक Jon Tackabury, स्रोत
एक बहुत ही अंतर्दृष्टि लेख नहीं है।
जोड़ा लेखक aehlke, स्रोत

मैं क्षेत्रों के विरोध में आंशिक कक्षाओं को पसंद करता हूं।

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

0
जोड़ा

कोड को व्यवस्थित करने के लिए मुझे वास्तव में #region का उपयोग करने में कोई समस्या नहीं है। निजी तौर पर, मैं आम तौर पर संपत्तियों, घटना हैंडलर, और सार्वजनिक / निजी तरीकों जैसी चीजों के लिए विभिन्न क्षेत्रों को स्थापित करूंगा।

0
जोड़ा

मुझे आम तौर पर पता चलता है कि सी # में घटनाओं जैसे कोड से निपटने पर, जहां कोड की लगभग 10 पंक्तियां हैं जो वास्तव में एक घटना घोषणा का हिस्सा हैं (इवेंटआर्ग क्लास प्रतिनिधि घोषणा और घटना घोषणा) उनके चारों ओर एक क्षेत्र डालकर उन्हें बाहर निकालना जिस तरह से यह थोड़ा और पठनीय बनाता है।

0
जोड़ा

जबकि मैं समस्या को समझता हूं कि जेफ, एट। अल। क्षेत्रों के साथ, क्या मैं नहीं करता समझता हूं कि क्यों CTRL + एम , CTRL + फ़ाइल में सभी क्षेत्रों का विस्तार करने के लिए एल से निपटना इतना मुश्किल है।

0
जोड़ा

मैं खुद को #regions पसंद करता हूं, लेकिन एक पुराना सहकर्मी चीजों को छुपाने के लिए खड़ा नहीं हो सका। एक बार मैंने 7 #regions वाले पृष्ठ पर काम करने के बाद अपना मुद्दा समझा, कम से कम 3 जिनमें ऑटो-जेनरेट किया गया था और वही नाम था, लेकिन आम तौर पर मुझे लगता है कि वे चीजों को विभाजित करने और सबकुछ कम रखने का एक उपयोगी तरीका हैं अव्यवस्थित।

0
जोड़ा

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

0
जोड़ा

एक्लिप्स जावा में कुछ (या प्लगइन के साथ PHP) स्वयं करता है। आपको फ़ंक्शंस को फोल्ड करने की अनुमति देता है। मुझे यह पसंद है। अगर मुझे पता है कि कोई फ़ंक्शन क्या करता है और मैं इस पर काम नहीं कर रहा हूं, तो मुझे इसे देखने की आवश्यकता नहीं है।

0
जोड़ा

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

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

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

0
जोड़ा

मैं व्यक्तिगत रूप से #Regions का हर समय उपयोग करता हूं। मुझे लगता है कि यह मुझे एक दूसरे से अलग गुणों, घोषणाओं, आदि जैसी चीज़ों को रखने में मदद करता है।

यह शायद एक अच्छा जवाब भी है!

कोडिंग डरावनी

संपादित करें: डांग, पैट ने मुझे इस पर हराया!

0
जोड़ा

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

0
जोड़ा

@Tom

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

0
जोड़ा

9 out of 10 times, code folding means that you have failed to use the SoC principle for what its worth.
I more or less feel the same thing about partial classes. If you have a piece of code you think is too big you need to chop it up in manageable (and reusable) parts, not hide or split it up.
It will bite you the next time someone needs to change it, and cannot see the logic hidden in a 250 line monster of a method.

Whenever you can, pull some code out of the main class, and into a helper or factory class.

foreach (var item in Items)
{
    //.. 100 lines of validation and data logic..
}

के रूप में पठनीय नहीं है

foreach (var item in Items)
{
    if (ValidatorClass.Validate(item))
        RepositoryClass.Update(item);
}



My $0.02 anyways.

0
जोड़ा
यह सच है। यदि आप एक वर्ग को ऐसे तरीके से डिज़ाइन करते हैं जो आपको इसे पठनीयता के लिए कई फ़ाइलों में विभाजित करने के लिए मजबूर करता है, तो आप असफल हो जाते हैं।
जोड़ा लेखक Lars Mæhlum, स्रोत
LongTTH: आप आंशिक कक्षा नहीं चाहते हैं, आप कई वर्गों की संरचना चाहते हैं।
जोड़ा लेखक Lars Mæhlum, स्रोत
मैंने सोचा कि आंशिक कक्षाएं मुख्य रूप से जेनरेट कोड में कार्यक्षमता जोड़ने का एक तरीका सुरक्षित रखने के लिए थीं?
जोड़ा लेखक Matt Sach, स्रोत
मुझे ऐसा नहीं लगता है, जावा डॉटनेट जैसे आंशिक वर्ग का समर्थन नहीं करता है, फिर सोचें कि आपको जटिल जीयूआई के साथ क्या करना है।
जोड़ा लेखक Luke, स्रोत

कोडिंग डरावनी आलेख वास्तव में मुझे इसके बारे में सोचने लगा भी।

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

0
जोड़ा

मैं व्यक्तिगत रूप से क्षेत्रों से नफरत करता हूं। एकमात्र कोड जो मेरी राय में क्षेत्रों में होना चाहिए कोड उत्पन्न होता है। जब मैं फ़ाइल खोलता हूं तो मैं हमेशा Ctrl + M + O से प्रारंभ करता हूं। यह विधि स्तर पर folds। जब आपके पास क्षेत्र होते हैं तो आप क्षेत्र के नामों के अलावा कुछ भी नहीं देखते हैं।

समूह विधियों / फ़ील्ड को तार्किक रूप से जांचने से पहले ताकि यह Ctrl + M + O के बाद ठीक लगे। यदि आपको क्षेत्रों की आवश्यकता है तो आपको अपनी कक्षा में बहुत सी रेखाएं हैं। मुझे यह भी लगता है कि यह बहुत आम है।

क्षेत्र ThisLooksLikeWellOrganizedCodeBecauseIUseRegions

// कुल कचरा, यहां कोई संरचना नहीं है

endregion

0
जोड़ा

क्षेत्रों का उपयोग करना (या अन्यथा कोड फोल्ड करना) चाहिए कोड गंध (या उन्हें छुपाएं) या छिपाने वाले कोड के किसी अन्य विचार से कोई लेना देना नहीं है, जिसे आप नहीं चाहते हैं कि लोग "आसानी से" देखें।

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

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

0
जोड़ा

मेरा दृष्टिकोण यहां कुछ अन्य लोगों के समान है, कन्स्ट्रक्टरों, गुणों, घटनाओं इत्यादि में कोड ब्लॉक को व्यवस्थित करने के लिए क्षेत्रों का उपयोग करना।

रोलैंड वीगेल द्वारा उनके ब्लॉग एंट्री से उपलब्ध वीएस.NET मैक्रोज़ का एक उत्कृष्ट सेट है, #region के लिए बेहतर कीबोर्ड समर्थन ... #endregion । मैं वर्षों से इनका उपयोग कर रहा हूं, ctrl + मैपिंग। इसे विस्तारित करने के लिए वर्तमान क्षेत्र और ctrl ++ को पतन करने के लिए। यह पता लगाएं कि यह बहुत बेहतर काम करता है कि डिफ़ॉल्ट VS.NET कार्यक्षमता जो सब कुछ folds / unfolds।

0
जोड़ा

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

0
जोड़ा

कभी-कभी आप खुद को उस टीम पर काम कर सकते हैं जहां #regions को प्रोत्साहित किया जाता है या आवश्यक है। यदि आप मेरे जैसे हैं और आप फोल्ड कोड के साथ गड़बड़ नहीं कर सकते हैं तो आप सी # के लिए रूपरेखा बंद कर सकते हैं:

  1. Options -> Text Editor -> C# -> Advanced Tab
  2. Uncheck "Enter outlining mode when files open"
0
जोड़ा
शानदार! बस शानदार।
जोड़ा लेखक Gavin Miller, स्रोत

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

0
जोड़ा
मैं असहमत हूं। कोई चर्चा नहीं है जो लोगों को सोच बनाता है कि वे कुछ क्यों कर रहे हैं (संभवतः वे लंबे समय से कुछ क्यों कर रहे हैं), और भविष्य में काम करने के बेहतर तरीकों का मूल्यांकन करते हैं, कहीं भी नहीं जाते हैं।
जोड़ा लेखक Mike Hofer, स्रोत

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

इसके साथ, मैं क्षेत्रों के बारे में बाड़ पर हूँ। अधिकांश भाग के लिए, मैं उनका उपयोग नहीं करता; हालांकि, मैं हर दिन कोड के साथ काम करता हूं जिसमें क्षेत्रों को शामिल किया जाता है - कुछ लोग वास्तव में उन पर भारी होते हैं (एक क्षेत्र में निजी तरीकों को जोड़ना और फिर प्रत्येक विधि अपने क्षेत्र में तब्दील हो जाती है), और कुछ लोग उन पर प्रकाश डालते हैं (enums folding, गुणों को फोल्ड करना, इत्यादि)। अब तक अंगूठे का मेरा सामान्य नियम यह है कि मैं केवल क्षेत्रों में कोड डालता हूं यदि (ए) डेटा स्थैतिक बने रहने की संभावना है या अक्सर स्पर्श नहीं किया जाएगा (जैसे enums), या (बी) यदि ऐसी विधियां हैं subclassing या सार विधि कार्यान्वयन की वजह से आवश्यकता से बाहर लागू कर रहे हैं, लेकिन, फिर से, अक्सर छुआ नहीं जाएगा।

0
जोड़ा

enumerations

गुण

.ctors

तरीके

घटना हैंडलर

That's all I use regions for. I had no idea you could use them inside of तरीके.

एक भयानक विचार की तरह लगता है :)

0
जोड़ा