PEP-8 अधिकतम 79 वर्णों की अधिकतम लंबाई क्यों निर्दिष्ट करता है? [बन्द है]


235

इस सहस्राब्दी में पायथन PEP-8 को अधिकतम 79 वर्णों की अधिकतम लंबाई क्यों निर्दिष्ट करनी चाहिए ?

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

क्या इस उम्र में 79 वर्णों का पालन करने के लिए कोई (वैध रूप से) अच्छे कारण हैं?


73
अपने प्रश्न का उत्तर है में पीईपी-8।
cdleary

28
कम लाइन की लंबाई आपके KLOC को बढ़ाकर उत्पादकता बढ़ाती है। : पी
एलेक्स

26
79 अक्षर की सीमा पूरी तरह से पुरानी है। किसी भी मामूली जटिल कोडबेस से पता चलता है कि यह कोड को पढ़ने के लिए कितना अधिक अजीब बनाता है। Ex: github.com/openstack/nova/blob/master/nova/network/manager.py
जोनाथन


9
क्या आप लोग अलग-अलग उपकरण का उपयोग नहीं करते हैं?
एंडोलिथ

जवाबों:


129

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


28
अधिकांश पठन अध्ययन इंच में किए जाते हैं और प्रति पंक्ति वर्ण नहीं। 66 चरित्र का नियम समाचार पत्रों को पढ़ने के लिए किए गए अध्ययन पर आधारित है। हाल के अध्ययनों से पता चला है कि ऑनलाइन लेख पढ़ते समय, पढ़ने की गति लगभग 120 वर्ण प्रति पंक्ति (10 इंच आकार 12 फ़ॉन्ट) तक बढ़ जाती है, जिसमें कोई नुकसान नहीं होता है।
पेस

7
वास्तव में उस विषय को पढ़ने वाला हर व्यक्ति सोचता है कि 79 वर्ण इष्टतम हैं। इसलिए इसे PEP8 में जोड़ा गया था! यह उत्तर वास्तव में गलत है। यह एक सही एक है
erikbwork

6
मुझे लगा कि सवाल यह है कि 79 80 या 78 से बेहतर क्यों है
n611x007

157
there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is यह सिर्फ इतने तरीकों से गलत है। 40 अक्षरों पर एक लाइन लपेटें और मुझे बताएं कि यह कितना पठनीय है। स्पष्ट रूप से कम रैपिंग = अधिक पठनीयता जब तक आपके पास स्क्रीन स्पेस है, जो 2015 में आप करते हैं। लपेटने से पठनीयता प्रभावित होती है। पठनीयता प्रभावशीलता को बनाए रखती है। रखरखाव की गुणवत्ता पर प्रभाव पड़ता है। और गुणवत्ता प्रभावित होती है यदि आप 80 वर्णों पर लपेट रहे हैं। पूर्ण विराम।
जोनाथन

6
कुछ भी गैर-कोड के साथ पठनीयता के बारे में तर्क-वितर्क करना बेकार है क्योंकि वे अध्ययन पाठ को मान लेते हैं। कोड हर लाइन में अलग (चरित्र) लाइन की लंबाई के साथ पूरी तरह से अलग दिखता है। और यहां तक ​​कि अगर आप पंक्ति के अंत तक लिखते हैं, तो इंडेंटेशन प्रति पंक्ति वर्णों की मात्रा को बदलता है।
कोर्विंस

111

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

पठनीयता भी लागू लाइन इंडेंटेशन के कारणों में से एक है।


58
हाँ, दी गई। लेकिन 79 क्यों? 100 या 120 क्यों नहीं? चीजों को पठनीय रखना दोनों तरह से काम करता है। कोड का बहुत ऊपर-नीचे पढ़ना भी मुश्किल है।
पीसीकोरकोरन

17
यह सच है कि बहुत सारे उपकरण केवल 80 वर्ण दिखा सकते हैं। उनमें से कितने सॉफ्ट-रैपिंग का प्रदर्शन नहीं कर सकते हैं?
जिम

39
साथ ही, इसे कोड रैप नहीं करना पसंद किया जाता है। उपयोगकर्ता अनुभव के दृष्टिकोण से, यह अधिकांश के लिए अस्वीकार्य है।
जस्टिन बोजोनियर

8
एमवीएस जैसे कुछ ऑपरेटिंग सिस्टम हैं जो 72 अक्षरों से अधिक लंबी लाइनों को संभाल नहीं सकते हैं। PEP-8 यहाँ मदद नहीं करेगा। 79 वर्णों की एक मनमानी सीमा निर्धारित करने से कोई मतलब नहीं है कि प्रति वर्ण अच्छे कैसे हैं, यह संपादक, मॉनिटर, उपयोगकर्ता की व्यक्तिगत प्राथमिकताओं और इसी तरह निर्भर करता है।
कोडीनिक्स

96
79 अक्षर भी प्रोग्रामर को सब कुछ फिट करने के लिए छोटे अधिक गूढ़ चर और फ़ंक्शन नामों का उपयोग करते हैं। यह पठनीयता के लिए बुरा है।
गर्ट स्टेन डे

46

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

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

मुझे लगता है कि यह असंतोषजनक है और निराशा होती है जब उन स्रोत फ़ाइलों में से एक> 120 वर्ण चौड़ाई में है, क्योंकि इसका मतलब है कि मैं आराम से स्क्रीन की एक पंक्ति में कोड की एक पंक्ति फिट नहीं कर सकता। यह लाइन रैप करने के लिए प्रारूपण करता है।

मैं '120' कहता हूं क्योंकि यह वह स्तर है जिससे मैं कोड से अधिक व्यापक होने पर नाराज हो जाऊंगा। कई पात्रों के बाद, आपको पठनीयता के लिए लाइनों में विभाजित होना चाहिए, अकेले मानक कोडिंग दें।

मैं 80 कॉलम को ध्यान में रखते हुए कोड लिखता हूं। यह सिर्फ इतना है कि जब मैं उस सीमा पर रिसाव करता हूं, तो यह इतनी बुरी बात नहीं है।


11
"मैं 80 कॉलम को ध्यान में रखते हुए कोड लिखता हूं। यह सिर्फ इतना है कि जब मैं उस सीमा पर रिसाव करता हूं, तो यह इतनी बुरी बात नहीं है।" मेरे लिए भी वैसा ही।
कोबेहोन

4
10 साल बाद: यह सिर्फ इस बात पर निर्भर नहीं करता कि आपने लाइन रैपिंग कैसे सेट की है। लाइन रैपिंग आप चाहते हैं के रूप में बुद्धिमान या बेवकूफ हो सकता है। यदि यह पढ़ने में असहज है तो यह आपके संपादक की विफलता है।
डेविड मुल्डर

2
मैं 120 वर्णों पर कोड करता हूं, लेकिन कभी-कभी यह पठनीयता के अनुकूल होता है। यदि आप इसे बताते हैं तो 120 पर काले प्रारूप। PEP-8 यह भी कहता है "99 वर्णों तक की लाइन की लंबाई सीमा को बढ़ाना ठीक है" लेकिन लोग उस जानकारी को अधिक समय तक दबाए रखते हैं। लगभग कोई नहीं टर्मिनलों का उपयोग करता है जो 80 चौड़े हैं। लॉग संदेश कभी 80 विस्तृत नहीं होते हैं।
नील जूल

37

मेरा मानना ​​है कि टाइपोग्राफी का अध्ययन करने वाले आपको बताएंगे कि प्रति पंक्ति 66 वर्ण लंबाई के लिए सबसे पठनीय चौड़ाई माना जाता है। फिर भी, यदि आपको किसी मशीन को ssh सत्र से अधिक दूर से डिबग करने की आवश्यकता है, तो अधिकांश टर्मिनल 80 वर्णों के लिए डिफ़ॉल्ट हैं, 79 बस फिट बैठता है, इस तरह के एक मामले में कुछ भी व्यापक काम करने की कोशिश करना एक वास्तविक दर्द बन जाता है। आप दिन-प्रतिदिन के वातावरण के रूप में vim + स्क्रीन का उपयोग करने वाले डेवलपर्स की संख्या से भी आश्चर्यचकित होंगे।


<लौ> Emacs FTW! </ ज्योति> +1, हालाँकि। मुझे लगता है कि 79 सीमा UNIX (और संभवतया MULTICS) के शुरुआती दिनों से आती है जिसमें 80x25 वर्ण टर्मिनल थे।
जो डी

10
मेरी ssh + स्क्रीन + vim environemnts को लंबी लाइनें प्रदर्शित करने में कोई समस्या नहीं है।
चिशीस्टींडैंड

54
"प्रति पंक्ति 66 वर्णों को लंबाई के लिए सबसे अधिक पठनीय चौड़ाई माना जाता है" मुझे लगता है कि हमें 2 या 3 कॉलम में कोड लिखना चाहिए, क्योंकि समाचार पत्र कैसे रखे जाते हैं?
मार्क ई। हासे

23
@mehaase: आपकी व्यंग्यात्मक टिप्पणी सच्चाई के काफी करीब है: सभ्य संपादक अलग-अलग पैन कर सकते हैं और अलग-अलग सामान को एक साथ (एक ही या अलग-अलग फाइलों से) दिखा सकते हैं। संयोग से, यह आमतौर पर केवल तभी संभव है जब कोड में एक लाइन-लंबाई मानक हो ...
nperson325681

2
@mehaase: वास्तव में भयानक लगता है। मैं मजाक नहीं कर रहा हु।
टेकिन

19

डिफ़ॉल्ट आकार में एक मोनोस्पेस वाले फ़ॉन्ट को प्रिंट करना (A4 पेपर पर) 66 कॉलमों द्वारा 80 कॉलम है।


11
मैं इस मानक को स्वीकार करता हूं; यह मान्य है। लेकिन कौन प्रिंट किसी भी अधिक कोड? इसके अलावा, कौन कोड को ऐसे वातावरण से प्रिंट करता है जो स्केलिंग या अन्य स्वरूपण विकल्पों के प्रति असहिष्णु है? आखिरी बार जब आप जानते थे कि 100 वर्णों की एक पंक्ति को प्रस्तुत करने में उनकी असमर्थता के कारण क्या था?
पीसीकोरकोरन

3
लोग 2012 में कोड क्यों प्रिंट करते हैं? यह मुझे एक प्रौद्योगिकी सम्मेलन में जाने और एक बैग और एक मुद्रित बाइंडर प्रस्तुत करने की याद दिलाता है। यह 21 वीं सदी के लोग हैं: मुझे स्लाइड्स ई-मेल करें अन्यथा बैग और बाइंडर सीधे लैंडफिल में जा रहे हैं।
मार्क ई। हासे

2
तो 80-1 80-0 या 80-2 से बेहतर क्यों है?
n611x007 15:12

11
"डिफ़ॉल्ट आकार पर" आप कहते हैं? मुझे इन सार्वभौमिक रूप से स्वीकृत डिफ़ॉल्ट आकारों के बारे में अधिक बताएं।
ब्रूनो ब्रोंस्की

15
हां, उस तरीके को प्राथमिकता दें जो कोड प्रिंट पेपर पर दिखता है।
जोनाथन

8

यहाँ इसलिए कि मुझे 80-चरित्र पसंद है: काम पर मैं विम का उपयोग करता हूं और एक मॉनिटर पर एक समय में दो फाइलों पर काम करता हूं, मुझे लगता है, 1680x1040 (मुझे याद नहीं है)। यदि लाइनें अब लंबी हैं, तो मुझे वर्ड रैप का उपयोग करने पर भी फाइलों को पढ़ने में परेशानी होती है। कहने की जरूरत नहीं है, मैं अन्य लोगों के कोड से निपटने से नफरत करता हूं क्योंकि वे लंबी लाइनें पसंद करते हैं।


क्या आप जावास्क्रिप्ट / html के लिए विम का उपयोग नहीं करते हैं?
इलाद चांदी

2
@eladsilver मैं काम नहीं कर सकता अगर यह एक मजाक है? :-D
स्टीवन चर्च

क्षमा करें, विम के साथ बहुत गहरा नहीं है, जाहिर है अगर आप वेब में काम करते हैं तो आप इसे html / js के लिए भी उपयोग करते हैं और उन प्रकारों को कभी भी 80 char की सीमा के साथ नहीं आता है क्योंकि फ्रंट एंड डेवलपर्स pep8 के बारे में नहीं जानते हैं, इसलिए अजगर सीमा 80-char बनाना आप अपनी समस्या का समाधान नहीं करेंगे यदि आप अधिक उपयोग करते हैं तो केवल अजगर। तो मैं क्या पूछ रहा हूँ कि आप अन्य कोडिंग भाषाओं को कैसे संभालते हैं?
इलाद चांदी

मैं 120 चरित्र लाइनों के साथ विम में काम करता हूं। मैं उपयोग करता हूं: क्षैतिज विभाजन के साथ अंतर। यदि आप केवल 1680 पिक्सल पर 160 चार्ट फिट कर सकते हैं तो आपके पास एक बड़े फ़ॉन्ट का आकार होना चाहिए।
नील जूल

4

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


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

4
अधिकांश पायथन संपादक सॉफ्ट वर्ड रैपिंग नहीं करते हैं क्योंकि यह एक भाषा में कोड को पढ़ने के लिए अस्पष्ट कठिन पैदा करता है जहां व्हाट्सएप और इंडेंटेशन महत्वपूर्ण है।
क्रिस अपचर्च 1

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

5
यहां तक ​​कि अगर इसे नेत्रहीन रूप से संकेत दिया जाता है, तब भी यह कोड को पढ़ने के लिए बहुत अधिक कठिन बना देता है, यही कारण है कि पायथन संपादक आमतौर पर इसका समर्थन नहीं करते हैं।
क्रिस अपचर्च

क्या आपने वास्तव में इसे विस्तारित अवधि के लिए आज़माया है? मेरे पास है। यह मेरे अनुभव को पढ़ने के लिए कोड को अधिक कठिन नहीं बनाता है। क्या आप यह दावा कर सकते हैं कि पायथन के संपादकों में यह सुविधा शामिल नहीं है? मैंने वह दावा पहले कभी नहीं सुना है।
जिम

1

मैं जस्टिन से सहमत हूं। विस्तृत करने के लिए, कोड की लंबी पंक्तियों को मनुष्यों द्वारा पढ़ना कठिन है और कुछ लोगों को कंसोल चौड़ाई हो सकती है जो केवल 80 वर्ण प्रति पंक्ति को समायोजित करती हैं।

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


10
यह एक आलसी तर्क है। यह हमेशा ऐसा नहीं होता है कि 80 लाइनें पठनीयता को नुकसान पहुंचाती हैं। किसी भी जटिल जटिल पायथन कोडबेस पर एक त्वरित नज़र, जो 80 लाइनों पर लपेटता है, वास्तव में विपरीत को प्रदर्शित करता है - कि कई लाइनों के लिए सिंगल लाइन फ़ंक्शन कॉल को लपेटने से डब्ल्यूटीएफ का पालन करना कठिन हो जाता है।
जोनाथन

0

क्योंकि यदि आप इसे 80 वें कॉलम से परे धकेलते हैं तो इसका मतलब है कि या तो आप बहुत लंबी और जटिल लाइन का कोड लिख रहे हैं जो बहुत ज्यादा करता है (और इसलिए आपको रिफ्लेक्टर चाहिए), या कि आपने बहुत ज्यादा इंडेंट किया (और इसलिए आपको रिफ्लेक्टर चाहिए)।


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

42
यह उल्लेख करने के लिए कि यदि आप प्रतीकों को इस तरह से नाम देते हैं कि वे मानव पठनीय हैं, जैसे "usr_dir_gph" के बजाय "users_directed_graph", तो एक साधारण एक्सप्रेसवॉइन लाइन पर भी कुछ अक्षर खा जाएगा।
मार्क ई। हासे

8
मैंने हमेशा पायथन में पाया है कि अगर मैं 80 वार से अधिक अपने बुद्धिमान को रोकूं और सोचूं कि यह क्यों है। आमतौर पर खराब डिजाइन का निर्णय गलती पर होता है।
माइक वेला

3
यह मेरा अनुभव भी रहा है। यह लम्बी चर नामों को भी संबोधित करता है, जैसा कि @mehaase बताते हैं, लेकिन मुझे लगता है कि यह एक लाभ है। लगातार तीन शब्दों के उपलब्ध संयोजन ("users_directed_graph" के मामले में) एक ही नामस्थान में उचित रूप से फिट होने वाले घटकों की संख्या को बौना करते हैं। मैं पुराने कोड पर विचार करता हूं, जहां मैंने लिखा है कि कई समान लंबे चर नाम एक ही नामस्थान में पढ़ने के लिए कठिन हैं, और आमतौर पर रिफ्लेक्टर के लिए बेहतर है।
टिमक्लिफ़ोर्ड

4
एक ऐसी भाषा में जिसके लिए गुंजाइश के प्रत्येक परिवर्तन के लिए इंडेंट की आवश्यकता होती है, यह कहते हुए कि 80 वर्ण रेखाएं जटिलता के बराबर होती हैं, एक अति सरल तर्क है। कभी-कभी 80 वर्ण सिर्फ एक फ़ंक्शन को लागू करने के लिए क्या होता है। अन्य भाषाओं के लिए आधुनिक IDE / संपादकों को यह पहचानने के लिए पर्याप्त स्मार्ट है और वे समझ सकते हैं कि जब हर चीज पर कंबल प्रतिबंध रखने का विरोध किया जाता है, जो समग्र रूप से पठनीयता को नुकसान पहुंचाता है।
जोनाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.