क्या कोड "सुंदर लग" बनाने के साथ जुनून का कोई लाभ है?


34

कभी-कभी मैं कोड ("सुंदर लग रहा") बनाने में व्यग्रतापूर्ण मात्रा में समय (घंटे) व्यतीत करता हूं। मेरा मतलब है कि चीजों को सममित दिखना। मैं वास्तव में तेजी से एक पूरी कक्षा के माध्यम से यह देखने के लिए स्क्रॉल करूंगा कि क्या कुछ भी "सुंदर" या "साफ" नहीं दिख रहा है।

क्या मेरे द्वारा अपना समय नष्ट किया जा रहा है? क्या इस तरह के व्यवहार में कोई मूल्य है? कभी-कभी कोड की कार्यक्षमता या डिज़ाइन भी नहीं बदलेगा, मैं इसे फिर से संरचना करूँगा ताकि यह अच्छा लगे।

क्या मैं अभी पूरी तरह से ओसीडी हूं या इसमें कुछ लाभ छिपा है?


8
मैं बस
टाउन

1
यदि यह कंपनी प्रारूपण नियमों के साथ एक रन नहीं बचेगा, तो लाभ बहुत छोटा है।

2
अपने कोड को ऑटो-फ़ॉर्मेट करने का कार्यक्रम क्यों न बनाएं, ताकि आप खुश रहें और आप समय बर्बाद न करें?
जेटी

1
स्वरूपण इसे पठनीय बनाता है इसलिए यह महत्वपूर्ण है, लेकिन निश्चित रूप से "स्मार्ट" हो - ऑटो फॉर्मेटर्स का उपयोग करें। यदि वह स्वरूपण पर्याप्त रूप से अच्छा नहीं है - तो उस बिंदु पर आप ओसीडी हो सकते हैं।
1925

1
अच्छी तरह से @ अपने लारवेल ढांचे को आश्चर्यजनक रूप से सुंदर है
Mr.Web

जवाबों:


32

एक ऑटो-फॉर्मेटर का उपयोग करें। यदि आप वास्तव में कोड को मैन्युअल रूप से संपादित करने में इतना समय खर्च कर रहे हैं, तो मैं यह अनुमान लगाने के लिए तैयार रहूंगा कि आप बहुत चुनौती / ऊब नहीं हैं, क्योंकि इसके लिए कोई कारण नहीं है। VS में Ctrl + K, Cntrl + D एक संपूर्ण दस्तावेज़ को प्रारूपित करेगा। आप स्टाइल कॉप जैसी किसी चीज का इस्तेमाल कर सकते हैं अगर आप कुछ ज्यादा हैवीवेट चाहते हैं।

अपने कोड पर गर्व करना अच्छा है, लेकिन तब नहीं जब यह स्मार्ट होने की कीमत पर आता है (सबसे कुशल समाधान की तलाश में। इस मामले में, एक थकाऊ प्रक्रिया को स्वचालित करने के लिए एक उपकरण का उपयोग करके) और चीजों को प्राप्त करना (और क्या हो सकता है) आपने उन घंटों के दौरान काम किया है?)।


1
क्यों सभी बोल्ड दूसरे पैराग्राफ?
स्टीवन ज्यूरिस

5
@FrustratedWithFormsDesigner: अगर आधे पद पर जोर दिया जाता है तो यह जोर नहीं है। : पी
जॉन प्यड्डी

2
@Steven, @Jon - विख्यात और सम्पादित।
मॉर्गन हेरलॉकर

3
टिप्पणियों की थोड़ा विडंबना श्रृंखला। ;)
टेलरऑटवेल

2
@StuperUser, आलसी की तरह अधिक और स्वचालित चीजें प्राप्त करना :)

10

यदि आप कुछ भी नहीं बदल रहे हैं जो इसे बेहतर समझने की अनुमति देता है, तो हाँ, आप अपना समय बर्बाद कर रहे हैं।


3
+1: कुल अपशिष्ट। अन्य लोगों की अलग-अलग राय है और वे सुंदर हैं और आपके कोड को सुधारेंगे और यह भी शिकायत करने वाले सवाल लिखेंगे कि आप उनके आदर्श प्रारूपण का पालन क्यों नहीं करते हैं।
S.Lott

सभी कोड को एक पंक्ति में रखने से इसकी कार्यक्षमता में परिवर्तन नहीं होता है, लेकिन नई कथनों का उपयोग करने से यह अधिक समझ में आता है।
स्टीवन ज्यूरिस

@ सीनियर ज्यूरिस: क्या आप मोटापे के बारे में बात कर रहे हैं? यदि हां, तो क्यों? सवाल ऐसा नहीं लग रहा था। यह समय बर्बाद करने जैसा लग रहा था। आपको यह विचार कहां से आया कि कोड इतनी बुरी तरह से स्वरूपित था कि यह अपठनीय था?
S.Lott

@ एस.लॉट: नहीं, मैं मोटापे के बारे में बात नहीं कर रहा हूं। सभी कोड को एक लाइन पर रखना भयानक आडम्बर होगा। :) मैं इस बात को बनाने की कोशिश कर रहा था कि कुछ भी 'बदलते' नहीं, यह आपको कोड को बेहतर ढंग से समझने की अनुमति दे सकता है। अधिक विस्तृत विवरण के लिए नेविल के उत्तर को देखें। Ps: इसके अलावा मेरा मानना ​​है कि यह वास्तव में एक खाली जवाब है। बेशक, जब आप कुछ बदलते हैं जो आपको उस कोड को बेहतर ढंग से समझने की अनुमति नहीं देता है जो बेकार है, लेकिन यह अत्यधिक व्यक्तिपरक है, और यह वास्तव में सवाल है।
स्टीवन ज्यूरिस

6

छिपा हुआ कुछ भी नहीं, सुंदर कोड पढ़ना आसान है और बनाए रखना आसान है।

जब तक आपके पास एक विशाल कोडबेस न हो, "घंटे" थोड़ा अधिक लगता है। सब कुछ सही होना जरूरी नहीं है बस अच्छा होना है


5

यह निर्णय की बात है; यदि आप घंटों बिता रहे हैं, तो मैं कहूंगा कि आप शीर्ष पर जा रहे हैं। हालांकि, ऐसी चीजें हैं जो एक मानव कर सकता है जो एक ऑटो-फॉर्मेटर नहीं कर सकता है, और आप अपने कोड को और अधिक पठनीय बनाने के लिए कर सकते हैं जो कॉर्पोरेट कोडिंग मानकों में कैप्चर करना मुश्किल है।

उदाहरण के लिए, जब एक कक्षा में चर घोषित करते हैं, तो मुझे तार्किक समूह बनाना पसंद है - यह तर्क का पालन करना आसान बनाता है।

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

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


आपने मुझे अपना उत्तर लिखने से रोका। ; पी बहुत अच्छी तरह से डाल दिया!
स्टीवन ज्यूरिस

महत्वपूर्ण है कि संरचना और नामकरण परंपराओं ट्रम्प प्रारूप को नोट करने के लिए +1।
मॉर्गन हेरलॉकर

4

नहीं, आप पूरी तरह से ओसीडी नहीं हैं। एक प्रोग्रामर के रूप में मैंने अब तक की सबसे बड़ी तारीफ सुनी, "आपका कोड इतना साफ है कि मेरा छोटा भाई इसका पता लगा सकता है।"

किसी दिन किसी को आपके कोड का समर्थन करना होगा। स्वच्छ कोड का समर्थन करना बहुत आसान है। और किसी दिन जो तुम हो सकते हो। 6 महीने या एक साल में आपको याद नहीं रहने वाला कि आपने क्या किया। लेकिन अगर यह साफ है और पढ़ने में आसान है तो यह जल्दी वापस आ जाएगा।

यदि कोड कचरा है, तो यह सुंदर कचरा होने में मदद नहीं करता है। लेकिन अगर इसे अच्छी तरह से संरचित किया गया है और बस कार्यक्षमता के मुद्दे हैं, तो कार्यक्षमता में सुधार करना बहुत आसान होगा।


3

नहीं - कोड बनाने के साथ बहुत सुंदर लग रहा है बिंदु गायब है

यहाँ ज्ञान के कुछ टुकड़े हैं जो मुझे उपयोगी लगे:

पूछें कि कोड को साफ करने की आवश्यकता क्यों है

हो सकता है कि आप सुंदर की अपनी परिभाषा के आधार पर अपना समय बर्बाद कर रहे हों या नहीं।

प्रारूपण के मौलिक सिद्धांत का कहना है कि अच्छा दृश्य लेआउट कार्यक्रम की तार्किक संरचना को दर्शाता है। कोड को सुंदर बनाना कुछ के लायक है, लेकिन यह कोड की संरचना को दिखाने से कम है। [पृष्ठ 732, कोड पूरा 2 संस्करण, स्टीव मैककोनेल]

यदि आप कोड में परिवर्तन ट्रैक करने के लिए समवर्ती संस्करण प्रणाली का उपयोग करते हैं - तो सेम कमिट के भीतर लॉजिकल / एडिंग फीचर्स चेंजेस के साथ कोड फ़ॉर्मेटिंग परिवर्तन न करें।

यदि टीम के अन्य सदस्य फ़ाइल को संपादित कर रहे हैं तो यह स्पॉट में कठिन बदलाव लाएगा और अनावश्यक मर्ज संघर्ष का कारण बनेगा। यदि आपको स्वरूपण परिवर्तन करना होगा, तो जांचें कि टीम के अन्य सदस्य उस फाइल पर काम नहीं कर रहे हैं। [Paraphrased, Pg 93, व्यावहारिक संस्करण नियंत्रण तोड़फोड़ का उपयोग, दूसरा संस्करण]

साथ ही मार्टिन फाउलर 'दो टोपियाँ पहनने' और दिन भर उनके बीच स्विच करने की बात करते हैं। सुविधाओं को जोड़ने के लिए एक टोपी, रीफैक्टरिंग के लिए एक टोपी।

  1. आप एक नई सुविधा जोड़ने पर विचार करते हैं (फ़ीचर हैट)
  2. जैसे ही आप जाते हैं, आप समझ पाने के लिए मौजूदा कोड का उपयोग करते हैं। (टोपी को फिर से भरना)
  3. परिवर्तन करें।
  4. सुविधा जोड़ें। (फीचर हैट) वगैरह…।

[पैराफ्रास्ड पीजी 57ish, रिफलेक्टिंग, मार्टिन फाउलर]

इसलिए, पूरे कोड बेस को प्रीटेट करने की कोशिश में घंटों न बिताएं। बस अगली सुविधा को जोड़ने के लिए आपको पर्याप्त कोड की आवश्यकता होती है।

संक्षेप में ... जब आप पहली बार आए थे तब की तुलना में अच्छे राज्य में कोड के प्रत्येक टुकड़े को छोड़ दें।


2

यदि यह पूरी तरह से स्वरूपण है, तो आप शायद एक सुंदर-प्रिंटर को पढ़ाने में कुछ समय निवेश करने से बेहतर हैं कि आप अपने कोड को कैसे स्वरूपित करना चाहते हैं। यह कुछ हद तक महंगा है, लेकिन मुझे लगता है कि आप 2-3 उपयोगों में उस टाइमर को पुनः प्राप्त करेंगे।

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


1

यह थोड़ा मदद करता है, लेकिन यह उस पर बहुत समय बिताने के लायक नहीं है। यह भी सुनिश्चित करें कि आपके सुधार वैरिएबल स्कोपिंग, RAII, ग्रुप कॉपी / पेस्ट कोड आदि को भी जोड़ते हैं। यदि आप वह सब करते हैं, तो यह 1000 गुना आसान हो जाता है जब आपको यह समझना होगा कि एक या एक साल बाद कोड क्या करता है।


1

आपको स्वच्छ कोड का उत्पादन करना चाहिए, लेकिन इसमें घंटे नहीं लगने चाहिए।

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

 switch (foo) {
      case a:  foo (a);             break; 
      case b:  foob ();             break;
      case c:  /* intent. empty */
      case d:  foocd ();            break; 
      default: allPrettyAligned (); break; 
 }

जिसे निर्दिष्ट करना कठिन है।


1

अगर आपको लगता है कि कुछ साफ करके इसे साफ किया जा रहा है, तो आप कुछ सतही चीजों पर ध्यान केंद्रित कर रहे हैं जो स्वचालित हो सकते हैं।

"गलत कोड बनाना गलत लग रहा है" पर इस क्लासिक लेख को पढ़ें और आप देखेंगे कि लोग आमतौर पर इंडेंटेशन (जो स्वचालित रूप से किया जा सकता है) को तुच्छ समझते हैं:

http://www.joelonsoftware.com/articles/Wrong.html

विशेष रूप से यह सूची:

ठीक है, अब तक मैंने एक प्रोग्रामर के रूप में उपलब्धि के तीन स्तरों का उल्लेख किया है:

१। आप अशुद्ध से साफ नहीं जानते।

२। आपके पास स्वच्छता का एक सतही विचार है, ज्यादातर कोडिंग सम्मेलनों के अनुरूप है।

३। आप सतह के नीचे अशुद्धता के सूक्ष्म संकेतों को सूंघना शुरू करते हैं और वे आपको कोड तक पहुंचने और ठीक करने के लिए पर्याप्त बग देते हैं।

वहाँ एक उच्च स्तर है, हालांकि, जो मैं वास्तव में बात करना चाहता हूँ:

४। आप अपने कोड को जानबूझकर इस तरह से आर्किटेक्ट करते हैं कि अस्वच्छता के लिए आपकी नाक आपके कोड को सही होने की अधिक संभावना बनाती है।

यह वास्तविक कला है: स्क्रीन पर त्रुटियों को दूर करने वाले सम्मेलनों का शाब्दिक रूप से आविष्कार करके मजबूत कोड बनाना।


0

"घंटे"? खैर, मैं कहूंगा कि आपका उत्तर "और" है, न कि "या": हाँ, आप ओसीडी जा रहे हैं, लेकिन इसका कुछ लाभ है।

शायद।

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

दूसरी ओर, यदि आपने अपनी खुद की सौंदर्यबोध की अपील करने का कुछ विकृत तरीका खोजा है, तो वास्तव में आपके कोड को काम करना आसान नहीं है, तो हाँ, यह समय का एक बड़ा नुकसान है।

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


0

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

हालाँकि मैं अपने सहकर्मियों या भविष्य के डेवलपर्स के लिए आपके कोड को ओवर-फॉर्मेट नहीं करने में सावधान रहूंगा। सुंदर तुम मेरे लिए सुंदर नहीं हो सकता है। :)


0

आप समस्या (बाध्यकारी व्यवहार) और लक्षण (अस्पष्ट रूप से स्वरूपण) को पहचानते हैं।

कारण और इलाज के बारे में क्या?

  • क्या आप कई घंटे काम कर रहे हैं?
  • क्या आप निराश, ऊब, चिंतित हैं?
  • आपका अगला काम क्या है? क्या यह ऐसा कुछ है जो आप नहीं करना चाहते हैं?
  • आपने पिछली बार कब छुट्टी ली थी? संवर्धन? एक उपलब्धि के लिए मान्यता?
  • क्या यह बर्न आउट संबंधित मुद्दा है?
  • क्या आप डेथ मार्च पर हैं?

कभी-कभी ये लक्षण एक संकेत होते हैं, यह समय है कि आप साहसिक बदलाव करें या आगे बढ़ें।

अपने डाउनर शीर्षक के बावजूद, यर्डन की पुस्तक में कई सहायक सुझाव हैं और कई संगठनों के लिए, एक बहुत ही वास्तविक विवरण बना रहा है।

http://dev.co.ua/docs/Edward%20Yourdon%20-%20Death%20March.pdf

आप बहुत ही व्यावहारिक लग रहे हैं और मुझे लगता है कि आप इसका जवाब जान सकते हैं।

अब, अपने आप को इस पर कार्रवाई करने की अनुमति दें।


-4

पवित्र गोजातीय!
आप लोगों ने कभी इंडेंट के बारे में नहीं सुना है?

इसकी एक कोड स्वरूपण उपयोगिता जो लगभग 20 वर्षों से है। इसके विकल्पों का एक मेगा-बकेट मिला है, ताकि आपके कोड को वैसे भी स्वरूपित किया जा सके जैसा आप चाहते हैं, स्वचालित रूप से।

ermm - लेकिन यह केवल C और कुछ पर काम करता है लेकिन सभी C ++ पर नहीं .... (wtf? GNU इसे अपग्रेड क्यों नहीं करता है?)


2
अपना पहला उत्तर देने के लिए धन्यवाद। निश्चित नहीं है कि किसने इसे वोट किया है, लेकिन कृपया स्टैक एक्सचेंज प्रोग्रामर्स प्रोग्रामर्स.स्टैकएक्सचेंज . com/questions/how-to-answer पर सवालों के जवाब देने के दिशानिर्देशों पर एक त्वरित नज़र डालें । आपकी प्रतिक्रिया संभवतः उन मानदंडों को संशोधित कर सकती है जो एक या दो वोट जीतने के लिए हैं।
डेवलपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.