आप अपने कोड में रिक्त लाइनों का उपयोग कैसे करते हैं?


31

घुंघराले ब्रेसिज़ प्लेसमेंट के बारे में चर्चा में पहले से ही सफेद स्थान के बारे में कुछ टिप्पणी की गई है।

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

वास्तव में, मैं कहूंगा कि मैं अपने कोड को संरचना करता हूं जैसे मैं लिखता हूं: मैं पैराग्राफ बनाता हूं, अब कुछ पंक्तियों (निश्चित रूप से 10 से कम) से अधिक नहीं है, और प्रत्येक पैराग्राफ को आत्म-निहित बनाने का प्रयास करें।

उदाहरण के लिए:

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

सब सब में, मैं शायद ही कभी 4/5 से अधिक लाइनें एक साथ गुच्छित होती हैं, जिसका अर्थ है एक बहुत विरल कोड।

मैं इस सभी सफेद स्थान को बेकार नहीं मानता क्योंकि मैं वास्तव में इसका उपयोग कोड को संरचना करने के लिए करता हूं (जैसा कि मैं वास्तव में इंडेंटेशन का उपयोग करता हूं), और इसलिए मुझे लगता है कि यह स्क्रीन एस्टेट के लायक है।

उदाहरण के लिए:

for (int i = 0; i < 10; ++i)
{
    if (i % 3 == 0) continue;

    array[i] += 2;
}

मैं मानता हूं कि दो बयानों के स्पष्ट अलग-अलग उद्देश्य हैं और इस तरह स्पष्ट होने के लिए अलग होने के लायक हैं।

तो, आप वास्तव में कोड में रिक्त लाइनों का उपयोग कैसे करते हैं (या नहीं)?


6
if (i % 3 != 0) { <newline here> array[i] += 2; <newline here> }, लेकिन मैं आपकी बात देख रहा हूँ :)
मर्लिन मॉर्गन-ग्राहम

इस प्रकार के प्रश्न रचनात्मक नहीं होते हैं । केवल कई बार आप "हाँ" और "नहीं" के केवल दो उपलब्ध जवाबों को फिर से लिख सकते हैं।

1
एक बेहतर सवाल यह है कि आप रिक्त लाइनों का उपयोग कैसे और क्यों करते हैं? मैं उसी तरह से रिक्त लाइनों का उपयोग करता हूं जैसे आप करते हैं, उसी प्रेरणा से।
डोमिनिक मैकडोनेल

1
@Mark, @takeshin: क्षमा करें, कीवर्ड में "कैसे" भूल गया। यह स्पष्ट है कि हम सभी उनका उपयोग करते हैं, मैं यह देखने की कोशिश कर रहा था कि यह कैसे लोगों द्वारा इस्तेमाल किया गया था (वर्गों को अलग करना, अगर / और, आदि ...), लेकिन ऐसा लगता है कि मुझे बहुत सामान्य उत्तर मिले: पी
मैथ्यू एम। एम।

3
for (int i = 0; i < 10; i += 3) { <newline here> array[i] += 2; <newline here> }लेकिन मैं आपकी बात देख रहा हूँ :)
बेरिन लोरिट्स

जवाबों:


87

हमेशा

पढ़ने योग्य कोड को साफ करने के लिए व्हॉट्सएप महत्वपूर्ण है। एक रिक्त रेखा (या दो) नेत्रहीन कोड के तार्किक ब्लॉकों को अलग करने में मदद करती है।

उदाहरण के लिए, स्टीव मैककोनेल के कोड कम्प्लीट से, लेआउट और स्टाइल पर दूसरा संस्करण अध्याय:

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


12
मैं किसी को यह कहते हुए सुन सकता हूं "लेकिन फिर आपको एक्सट्रैक्ट मेथड चाहिए!"। एक पैराग्राफ तब है जब एक्सट्रैक्ट मेथड के लिए पर्याप्त पर्याप्त कारण नहीं है।
फ्रैंक शीयर

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

2
मैं 100% सहमत हूं। व्हॉट्सएप तब उपयोगी होता है जब इसका उपयोग तार्किक रूप से कोड को जानबूझकर विभाजित करने के लिए किया जाता है। हालाँकि, व्हॉट्सएप के लिए व्हाट्सएप उतना ही बुरा है जितना कि व्हाट्सएप। एक पूर्व सहकर्मी को वास्तविक कोड के लगभग हर लाइन के बाद एक या एक से अधिक खाली लाइनें लगाना पसंद था। मैंने "रिफैक्टिंग" के लिए एक हास्यास्पद राशि खर्च की, जिसमें बेकार खाली लाइनों को हटाने के लिए कुछ हज़ार बार बैकस्पेस मारना शामिल था।
माइक स्पॉस

मैंने आपकी स्थिति का समर्थन करने के लिए कुछ डेटा जोड़े। देखें: meta.programmers.stackexchange.com/questions/1109/…
जेफ एटवुड

2
यह डेटा केवल रिक्त लाइनों के बारे में कुछ नहीं कहता है, केवल इंडेंटेशन के बारे में ..
ब्लोर्बर्ड

21

स्पष्टता के लिए हाँ।

जैसे मैंने इस जवाब में किया।


13

मैं करता हूं, लेकिन मैं यह सुनिश्चित करता हूं कि मैं इसे डालकर दस्तावेज करूं

(This line intentionally left blank.)

रेखा पर


1
टिप्पणियों के साथ सफेद लाइनें कोड से ध्यान आकर्षित कर सकती हैं
जूलियो सी सी

1
"यह पंक्ति जानबूझकर खाली छोड़ी" यह कहते हुए बहुत सारी टिप्पणियां आईं ... क्या आप यह नहीं मान सकते कि यदि कोई रेखा रिक्त है, तो यह जानबूझकर है या फिर यह कोड समीक्षा पारित नहीं हुई है?
वैकल्पिक

43
शायद यह सिर्फ मैं ही हूं, लेकिन मैंने मान लिया कि ओपी मजाक कर रहा है ...
जेएसबी

7
आप कब से आईबीएम के लिए काम कर रहे हैं?
Guillaume

12

हां, लेकिन मैं इसका दुरुपयोग नहीं करता।

मैंने कोड देखा है जहां एक विधि के अंदर कोड की प्रत्येक पंक्ति को एक रिक्त रेखा से अलग किया जाता है, और दो रिक्त रेखाओं का उपयोग किया जाता है जहां एक तार्किक पृथक्करण होता है। यह सिर्फ यह मेरी राय में भी कम पठनीय बनाता है। मैंने देखा है कि व्हाट्सएप का इस्तेमाल क्रेजी एलाइनमेंट बनाने के लिए किया जाता है, जैसे कि:

//Prot.   Return type                    Name                 Arg1        Arg2
//=====   ============================== ==================== =========== ========

private   int                            AMethodWithALongName(string s,   object o)
{
    ...
}

private   IDictionary<MyLongObject, int> SomethingCrazy      (string s)
{
    ...
}

protected void                           Foo                 (string str, object o)
{
    ...
}

क्षैतिज व्हाट्सएप का एक ही दुरुपयोग ऊर्ध्वाधर व्हाट्सएप पर लागू किया जा सकता है। किसी भी उपकरण की तरह, इसे बुद्धिमानी से उपयोग करें।


1
कुछ अवधारणाओं की तरह ड्राइव करने के लिए एक परिचयात्मक स्तर के कॉलेज पाठ्यक्रम में उपयोग किया जाएगा कि कुछ की तरह लग रहा है। क्या यह वास्तव में एक पेशेवर वातावरण में इस्तेमाल किया गया था?
rjzii 15

1
@Rob: इसका उपयोग एक बड़ी प्रणाली के उत्पादन कोड में किया गया था, लेकिन टिप्पणी हेडर के बिना, और बड़ी पर्याप्त विधि वाले निकाय जो कि संरेखण ने मुझे हैरान कर दिया, क्योंकि मैं उस फ़ाइल में अन्य विधि हस्ताक्षर नहीं देख सका। जब मैंने तरीकों के निकायों को ढहा दिया, तो मैं व्हाट्सएप के लिए "कारण" देख पा रहा था।
एलोन गुरिलनेक

यह हेडर या इंटरफ़ेस फ़ाइल में काम कर सकता है
मिंग-तांग

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

@ हाई स्कूल में, हमने एक जावा प्रोग्रामिंग बुक (शीर्षक याद नहीं कर सकते) का इस्तेमाल किया, जो बुद्धिमानी से कभी भी इस तरह की क्षैतिज रिक्ति का उपयोग करने की सलाह नहीं देता है, बस इसलिए कि यह बड़ी मात्रा में समय बर्बाद कर समाप्त होता है जब आपको इस तरह के पुन: टेबुलेशन करना होगा।
मैथ्यू फ़्लेशेन

5

मुझे अपने कोड को इस तरह लिखने के लिए बहुत आलोचना की जाती है। मुझे समझ नहीं आता कि कोई इस तरह से क्यों नहीं करेगा।

जब आप किसी प्रोजेक्ट में वापस आते हैं तो समय की विस्तारित अवधि के बाद यह पठनीयता बहुत महत्वपूर्ण हो जाती है और मैंने एक कहावत सुनी है "हमेशा कोड लिखें अगर अगला लड़का जो इसे पढ़ रहा है वह एक साइकोपैथ है जो आपके स्थान को जानता है"।


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

जेसन ने क्या कहा। जब मैं एक कोडबेस में वापस आ रहा हूं, तो मुझे प्रति स्क्रीन पर अधिक से अधिक LOC रखना पसंद है ताकि मैं इसे जल्दी से पचा सकूं। अगर कोई व्हाट्सएप के आधे पृष्ठ (या भगवान ने उन भयानक xml- शैली टिप्पणियों में से एक को मना किया) में रखा है, तो मुझे इसे केवल पढ़ने के लिए अस्थायी रूप से पुन: स्वरूपित करने के लिए बहुत लुभाया जाएगा, फिर undoकाम करने के लिए कुछ समय (प्रारूप युद्धों को डॉन करें) उत्पादकता के लिए नेतृत्व नहीं है, इसलिए मैं टिप्पणी और व्हाट्सएप को एकमुश्त हटा नहीं पाऊंगा, लेकिन मेरी प्राथमिकता सबसे अधिक भाग के लिए उनके खिलाफ है)।
इनामाथी

पाठ की एक दीवार को पढ़ना लगभग असंभव है, चलो अकेले मानव मानस शास्त्र इसका विरोध करता है। मुझे लगता है कि समान बयानों को एक साथ समूह में लाने के लिए, समान चर में हेरफेर करने वाले कोड की पंक्तियों को समूहबद्ध करना भी अच्छा है। मुझे लगता है कि यह सब वरीयता है, लेकिन मुझे लगता है कि इस व्यवसाय में किया गया कुछ भी कभी भी जल्दी नहीं होना चाहिए।
ब्रायन हैरिंगटन

5

मैं हमेशा सॉफ़्टवेयर नहीं लिखता, लेकिन जब मैं करता हूं, तो मैं स्पष्टता के लिए रिक्त लाइनों का उपयोग करता हूं।


4
मैं अक्सर हार्डवेयर भी लिखता हूं, फिर उसे प्रिंट करता हूं। यह इतना सस्ता है।
टिम पोस्ट

5
डॉस एक्वीक जोक?
पेपरजाम

@ वास्तव में, यह इतना मज़ेदार नहीं है: 3 डी प्रिंटिंग ;) (और ... अच्छा हो, हम यहाँ सभी देशी अंग्रेज़ी बोलने वाले नहीं हैं :)।
ताकेशिन

1
@ ताकेशिन मैं किसी पर मज़ाक नहीं कर रहा था, और मैं 3 डी प्रिंटिंग के लिए तैयार था। हाँ, टिप्पणी हंसी का मतलब था, मैं तुम्हें आशय :) इसके अलावा, तथ्य यह है कि @Paperjam सही मुद्रण के बारे में एक मजाक के तहत टिप्पणी की है की गलत व्याख्या की जा सकती है लगता है .. अच्छी तरह से .. अनमोल :)
टिम पोस्ट

मुझे सॉफ्टवेयर नहीं लिखना है लेकिन इसे हार्डवेर करना है।
mlvljr

5

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

  • एक कक्षा में, मैं उन तरीकों को समूहित करूँगा जो एक साथ चलते हैं, जबकि उन्हें अगले समूह से एक रिक्त रेखा द्वारा अलग किया जाता है।

चूंकि आपके पास कई संबंधित सदस्य हैं, इसलिए वे एक नए वर्ग के उम्मीदवार हैं।

  • अगर मुझे एक टिप्पणी लिखने की आवश्यकता है, तो मैं आमतौर पर टिप्पणी से पहले एक खाली लाइन डालूंगा

जब भी कोड एक टिप्पणी के लिए पर्याप्त स्पष्ट नहीं होता है, मैं पूछता हूं कि क्या मैं कोड को स्पष्ट करने के लिए रिफ्लेक्टर कर सकता हूं ताकि टिप्पणी की आवश्यकता न हो।

  • एक विधि में, मैं प्रक्रिया के प्रति एक पैराग्राफ बनाता हूं

प्रत्येक "पैराग्राफ" के लिए एक विधि क्यों नहीं बनाई गई?

यदि आप अपनी कक्षा में विधियों का एक समूह बनाते हैं, तो एक नया वर्ग निकालने के बारे में मेरा नोट देखें।


5

हाँ। यह एक फ़ाइल को नेत्रहीन स्कैन करना आसान बनाता है। अन्य बातों के अलावा, यह स्पष्ट करता है कि एक टिप्पणी किस लाइन के साथ है।

Some code here
// Which line does this comment go with?
More code here

// It's pretty clear which line this comment goes with
More code here

Still more code here

4

मैं रिक्त लाइनों का उपयोग संयम से और लगातार करता हूं, और लगातार संयम से अधिक महत्वपूर्ण है। तथापि:

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

इसमें से अधिकांश भयानक रूप से विवादास्पद नहीं है; इस प्रकार हो सकता है। मैं ध्यान देता हूं कि लाइन के अंत में खुले ब्रेसिज़ के साथ K & R संकेतन निराशाजनक रूप से अक्सर एक खाली लाइन द्वारा पीछा किया जाता है। मैं व्यक्तिगत रूप से पंक्ति के अंत में ब्रेसिज़ को नापसंद करता हूं और ब्रेस के बाद एक रिक्त रेखा के साथ मिश्रण करता है जो नोटेशन (IMNSHO) का एक बकवास बनाता है। खुली ब्रेस को अगली पंक्ति में, अपने आप पर रखें, और आपके पास ज्यादातर खाली लाइन है (और, IMNSHO, अधिक रीडिंग कोड)। यदि आपको लाइन के अंत में K & R ब्रेस का उपयोग करना चाहिए, तो वर्टिकल स्पेस सेविंग को एक्सट्रॉनिक रिक्त लाइनों के साथ न लगाएं।

// I don't like this
if (something == anotherthing) {
    print ...
    update ...
}

// I much prefer this
if (something == anotherthing)
{
    print ...
    update ...
}

// I loathe this - not least for its inconsistent spacing
if (something == anotherthing) {

    print ...
    update ...
}

// I loathe this too, for its absurd waste of vertical space
if (something == anotherthing) {

    print ...
    update ...

}

3

वह लिखें जो सबसे अधिक सुपाच्य हो और कम से कम आश्चर्यजनक हो।

function validEmail($addr) {
    $regex = "/.../";   
    return preg_match($regex, $addr);
}

इस फ़ंक्शन को doc टिप्पणियों की 12 पंक्तियों की आवश्यकता नहीं है।

वास्तव में, यह किसी भी टिप्पणी की जरूरत नहीं है।

या रिक्त रेखाएँ।

वे इसके सार से अलग हो जाते।


1
शीर्ष पर एक टिप्पणी जो यह बताती है कि क्या पते स्वीकार किए जाते हैं, अच्छा होगा। क्या एक ईमेल पते को मान्य करने के लिए वास्तव में एक नियमित अभिव्यक्ति का उपयोग किया जा सकता है?
केविन क्लाइन

3

समारोह के अंदर? शायद ही कभी

अगर मेरे पास एक स्पष्ट अलग ब्लॉक है तो यह एक नए फ़ंक्शन के लिए फिर से सक्रिय हो रहा है। अगर कुछ मामलों में इसके लायक नहीं है।

मेरे लिए फंक्शन के अंदर ब्लैंक लाइन्स सबसे गलत "बेस्ट प्रैक्टिस" में से एक है।


2

अक्सर

कोड के तार्किक ब्लॉकों के लिए इसका उपयोग करें जो समान रूप से संसाधित होते हैं। एक बार जब आप एक टिप्पणी जोड़ते हैं कि आप एक अलग कदम उठा रहे हैं - यह निकालने का तरीका है।

अच्छा व्हाट्सएप

{
    int x = computeX();
    x += ADJUSTMENT_FACTOR_X;

    int y = computeY();
    y += ADJUSTMENT_FACTORY_Y;

    setPosition(x, y);
}

खराब व्हाट्सएप

{
    //Open a connection
    String serverAddress = lookupAddress();
    Connection connection = openConnection(serverAddress);
    connection.login(user, password);


    //Go get stuff from the server
    item1 = connection.get(1);
    item2 = connection.get(2);

    //Close connection
    connection.close();

    //log data
    log(item1);
    log(item2);

    //Update client
    gui.updateView(item1, item2);        
}    

बनाम

{
    Connection connection = openConnection();
    updateData(connection);
    closeConnection(connection);
    logUpdate();
    updateGui();
}

बनाम

{
     updateDataFromServer();
     logUpdate();
     updateGui();
}

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

1
मैं नहीं देखता कि क्यों बुरा बुरा है और न ही आपने वीएस क्यों लिखा

5
उन टिप्पणियों में से कोई भी किसी भी तरह की जरूरत है, और यही कारण है दुनिया में होगा एक निकालने connection.close()के लिएcloseConnection(connection)
विकल्प

एक टिप्पणी के साथ एक कोड ब्लॉक एक निकाली गई विधि से बेहतर है, जब तक कि ब्लॉक कम और कुछ न हों। निकालने के तरीके मुक्त नहीं हैं; यह एक कोड स्थानीयता लागत है।
क्रेग गिदनी

और आप बस item1और item2वैश्विक चर बनाते हैं जो तरीकों के माध्यम से संवाद करते हैं? Ick!
TMN

2

न केवल मैं व्हाट्सएप का उपयोग करता हूं, मैं स्पष्टता के लिए ब्रेसिज़ का उपयोग करता हूं।

ब्रेसिज़ का उपयोग यह कहने के लिए कर सकते हैं कि ये संभवतः कार्य हो सकते हैं।

code
{
    code
    code
    code
    code
}
{
    code
    code=code
    code
    code

    code()
    code()
}

2

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

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

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

...

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

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


2

एक प्रोफेसर एमेरिटस ने सलाह के दो महान टुकड़े दिए

  1. व्हॉट्सएप फ्री है
  2. स्टेपल का उपयोग न करें जो कागज के सामने के माध्यम से वापस प्रहार करता है, या मैं आपको विफल कर दूंगा।

1

अंगूठे के मेरे नियम ये हैं:

  1. यदि मुझे कल लिखे गए कोड को पढ़ने में परेशानी होती है, तो मुझे संभवतः एक विधि या तीन निकालने की आवश्यकता है।

  2. यदि मेरी कक्षा की परिभाषा आसानी से पढ़ने के लिए बहुत लंबी है, तो मुझे संभवतः एक मॉड्यूल / इंटरफ़ेस / ऑब्जेक्ट निकालने की आवश्यकता है।

  3. विधि परिभाषा: एक पंक्ति जोड़ें

  4. मॉड्यूल / कक्षा की परिभाषा: दो लाइनें जोड़ें


1

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

यदि आप एक नया विचार या एक ही विचार का एक नया पहलू शुरू कर रहे हैं, तो आप एक नया पैराग्राफ शुरू करते हैं - जैसे।

अनिवार्य कोड में, मैं एक साथ कार्य करता हूं जो एक एकजुट कार्य करता है; डिक्लेरेटिव कोड में, मैं एक साथ कोड देता हूं जो एक विचार के एक एकजुट विवरण का वर्णन करता है।

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


1

मेरी राय में ब्लैंक लाइनें बहुत जरूरी हैं। मैं उन्हें कोड के विभिन्न तार्किक ब्लॉकों को अलग करने के लिए उपयोग करता हूं। कोड को पठनीय बनाता है। पठनीय कोड अच्छा कोड है;)

मेरा आदर्श कोड टुकड़ा प्रत्येक तार्किक ब्लॉक को एक रिक्त रेखा से अलग किया जाएगा और प्रत्येक ब्लॉक के शीर्ष पर एक टिप्पणी होगी जिसमें एक प्रमुख तर्क होगा।

बेशक, अगर लोग इसे हर जगह कई रिक्त लाइनों को जोड़कर करते हैं, तो मुझे यह बहुत परेशान लगता है :(


1

मैं केवल घोषणाओं और कोड को अलग करने के लिए एक फ़ंक्शन / विधि के भीतर व्हाट्सएप का उपयोग करता हूं।

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

आमतौर पर, Peusdo-code में:

def function(arg1, argn, ...)
    INITIALIZERS

    CODE
    BLOCK_START
        INITIALIZERS

        CODE
    BLOCK_END
    CODE
end

यदि मैं बेकार व्हाट्सएप देखता हूं, तो मैं आमतौर पर ऐंठता हूं।


ऐसा लगता है कि C-ish, मेरा C ++ कोडिंग स्टैंडर्ड इसे आरम्भ किए बिना किसी ऑब्जेक्ट को घोषित करने की अनुशंसा नहीं करता है, जो इस उपयोग को रोकता है: /
Matthieu M.

@ मैथ्यू एम: ठीक है, फिर संपादकों द्वारा निर्णय बदलें। लेकिन मैं कभी भी INITIALIZERS को एक ब्लॉक के बीच में नहीं देखना चाहता। यदि इसे करने की आवश्यकता है, तो यह एक ऐसी चीज है जिसके लिए एक छोटे दायरे की आवश्यकता होती है, इसलिए इसे एक निजी विधि / फ़ंक्शन की आवश्यकता होती है।
हेलेम्म

0

सफेद स्थान अत्यंत मूल्यवान है।

यहाँ सौदा है ... नर्ड जो E = MC 2 जैसे जटिल कोड लिखते हैं, वे थायराइड प्रोग्रामिंग कौशल दिखाने में महान हैं।

अब छह महीने आगे बढ़ते हैं, और यह सुबह 2:00 बजे है और छह महीने में जिस सिस्टम को नहीं देखा गया है वह ई = एमसी 2 की बहुत लाइन पर टूट गया है । यह डीबग करना लगभग असंभव है ... हर कोई बाहर निकाल रहा है।

मान लीजिए कोड कुछ इस तरह दिखता है ...

See Dick
See Jane
See Dick and Jan

यदि यह 2:00 पूर्वाह्न है और कोड टूट गया है। एक त्वरित नज़र आपको दिखाएगी कि लाइन तीन होनी चाहिए थी

See Dick and Jane

समस्या सुलझ गयी।

निचला रेखा ... व्हॉट्सएप का उपयोग करें।


1
एर्म ... इन उदाहरणों में से कोई भी वास्तव में आपकी बात का समर्थन नहीं करता है। व्यक्तिगत रूप से, मुझे लगता है कि E = MC2 E = MC 2 की तुलना में अधिक पठनीय है (निचला रेखा व्हॉट्सएप, राइट का उपयोग करना था?)। ओह, और जब तक आप अभी भी हाई स्कूल में नहीं हैं, मुझे यकीन है कि आप उन लोगों को संदर्भित करने के लिए एक बेहतर तरीके के साथ आ सकते हैं जो "नर्ड" से असहमत हैं।
जेसन बेकर

@ जेसन - शब्दों का अच्छा बिंदु बुरा विकल्प। ई = एमसी 2 बहुत अधिक पठनीय है, यह वह बिंदु नहीं था जिसे मैं पार करने की कोशिश कर रहा था। यह अधिक है जैसे आप अपनी वेबसाइट YAGNI और SYNDI पर बात कर रहे थे। jasonmbaker.com/tag/programming
माइकल रिले - AKA

0

जैसा कि कई अन्य लोगों ने कहा है, कोड की आसान रीडिंग के लिए रिक्त लाइनें बनाते हैं। हालाँकि, कुछ भाषाएँ हैं जो इस मानक को लागू करती हैं। एक कि मैं अपने सिर के ऊपर से सोच सकता हूं (इतनी खाली लाइनों के बारे में नहीं लेकिन उचित इंडेंटेशन) पायथन है।


0

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


0

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


0

साइकोपैथ का उत्तर सबसे अच्छा है, लेकिन मैं यह मानूंगा कि अगले व्यक्ति एक बेवकूफ है, और यह मानकर कि वे आप हैं, और आप उन्हें गलत साबित करना चाहेंगे।

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

मुझे लगता है कि बहुत सारे कोडर या तो यह मान लेते हैं कि यह वे स्वयं होंगे, जो कोड पर "मरम्मत" कर रहे होंगे, या बस परवाह नहीं करेंगे।


0

खाली लाइनें महत्वपूर्ण हैं। हालाँकि, उद्घाटन ब्रेस पर एक पूरी खाली लाइन को बर्बाद करने से आप स्क्रीन पर देखे जाने वाले कोड की मात्रा कम कर सकते हैं। होना चाहिए:

for (int i; i < 10; ++i)
{  if (i % 3 == 0) continue;

   array[i] += 2;
}

('मुझे' के लिए एक ही लाइन पर ब्रेस '{' ... 'कि मेशुगह) लगाने की शुरुआत न करें।'


2
हाँ। मैं आपका पूरा कार्य एक स्क्रीन पर देखना चाहता हूं। यह अपनी लाइन पर प्रारंभिक घुंघराले ब्रेस मत रखो। यही इंडेंटेशन के लिए है।
केवबर्न्स जूनियर

अपनी ही लाइन पर ब्रेस का पूरा बिंदु कोड के ब्लॉक को स्पष्ट करना है। ब्रेस के बाद कोड की एक पंक्ति को जोड़ना एकमात्र कारण है जो इस धर्म को आयोजित करता है! आप इसे 'के लिए' के ​​रूप में एक ही लाइन पर रख सकते हैं।
गैरी विलोबी

0

हाँ। पठनीयता के लिए। कभी-कभी मैंने कोड में रिक्त लाइनें भी लिखीं जो मैंने नहीं लिखीं। मुझे कोड को समझना आसान लगता है जब उनके पास रिक्त लाइनों के माध्यम से तार्किक समूहन होता है - जैसे कि यू इसके माध्यम से "स्पीड-रीड" कर सकते हैं।


0

हमें कोडब्लॉक के बीच खाली लाइनों का उपयोग करना चाहिए जैसा कि हम करते हैं जब हम एक पत्र लिख रहे होते हैं।

उदाहरण के लिए, फ़ंक्शन के बीच, या किसी फ़ंक्शन के अंदर जब हम एक लूप समाप्त करते हैं ...

अगर वे इस पर रखरखाव करना चाहते हैं तो लोग आपको एक साफ कोड देंगे;)


0

हम Microsoft StyleCop द्वारा अनुशंसित व्हाट्सएप का उपयोग करते हैं। पठनीयता और निरंतरता के अलावा, मैंने पाया है कि (छोटे वर्ग के आकार के साथ) ठीक से रखी गई संहिता से मर्ज का प्रबंधन करना बहुत आसान हो जाता है जब एक टीम के विभिन्न लोग एक ही क्षेत्र में काम कर रहे होते हैं।

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


0

कभी भी पूरी फाइल में नहीं, एक खाली लाइन। यह कहना नहीं है कि कोड में ब्रेक नहीं हैं:

 code;
 //
 morecode;

रिक्त लाइनें काम करने के लिए कोड के वर्गों को खोलने के लिए हैं, आपके पास अपने संपादक में एक जोड़ी हॉटकीज़ हैं जो आपको प्रचलित / अगली रिक्त पंक्ति में ले जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.