ทำไม PEP-8 ระบุความยาวบรรทัดสูงสุด 79 ตัวอักษร? [ปิด]


235

ทำไมในสหัสวรรษนี้ Python PEP-8จึงควรระบุความยาวบรรทัดสูงสุด 79 ตัวอักษร?

แทบทุกตัวแก้ไขโค้ดภายใต้ดวงอาทิตย์สามารถจัดการกับบรรทัดที่ยาวกว่าได้ สิ่งที่ควรทำเมื่อมีการตัดควรเป็นทางเลือกของผู้บริโภคเนื้อหาไม่ใช่ความรับผิดชอบของผู้สร้างเนื้อหา

มีเหตุผลที่ดี (ที่ถูกต้อง) ในการยึดถืออักขระ 79 ตัวในยุคนี้หรือไม่


73
คำตอบสำหรับคำถามของคุณอยู่ใน PEP-8
cdleary

29
ความยาวบรรทัดที่สั้นกว่าช่วยเพิ่มผลผลิตโดยการเพิ่ม KLOC ของคุณ : p
Alex

26
ความยาวสูงสุด 79 อักขระนั้นล้าสมัยแล้ว ฐานข้อมูลที่ซับซ้อนอย่างสุภาพแสดงให้เห็นว่ามันทำให้โค้ดอ่านอึดอัดใจมากขึ้นได้อย่างไร ตัวอย่าง: github.com/openstack/nova/blob/master/nova/network/manager.py
Jonathan

6
@Jonathan: ดูดีสำหรับฉัน ...
nperson325681

9
คุณไม่ใช้เครื่องมือ diff แบบคู่ขนานใช่ไหม
endolith

คำตอบ:


129

คุณค่าส่วนใหญ่ของ PEP-8 คือการหยุดให้ผู้คนโต้เถียงกันเกี่ยวกับกฎการจัดรูปแบบที่ไม่เหมาะสมและดำเนินการเขียนโค้ดที่มีรูปแบบที่ดีและสม่ำเสมอ แน่นอนว่าไม่มีใครคิดว่า 79 เป็นสิ่งที่ดีที่สุด แต่ไม่มีประโยชน์ที่ชัดเจนในการเปลี่ยนเป็น 99 หรือ 119 หรือความยาวบรรทัดที่คุณต้องการคืออะไร ฉันคิดว่าตัวเลือกคือสิ่งเหล่านี้: ปฏิบัติตามกฎและค้นหาสาเหตุที่คุ้มค่าในการต่อสู้เพื่อหรือให้ข้อมูลบางอย่างที่แสดงให้เห็นว่าการอ่านและผลผลิตมีความแตกต่างกันอย่างไรกับความยาวบรรทัด หลังนี้น่าสนใจอย่างยิ่งและจะมีโอกาสที่ดีที่จะเปลี่ยนใจผู้คนที่ฉันคิดว่า


28
การศึกษาการอ่านส่วนใหญ่จะใช้หน่วยเป็นนิ้วและไม่ใช่อักขระต่อบรรทัด กฎของตัวอักษร 66 ขึ้นอยู่กับการศึกษาที่ทำเพื่ออ่านหนังสือพิมพ์ การศึกษาล่าสุดแสดงให้เห็นว่าเมื่ออ่านบทความออนไลน์ความเร็วในการอ่านเพิ่มขึ้นถึงประมาณ 120 ตัวอักษรต่อบรรทัด (10 นิ้วที่ขนาดตัวอักษร 12) โดยไม่สูญเสียความเข้าใจ
Pace

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 ตัวอักษร หยุดเต็ม
Jonathan

6
การโต้เถียงเกี่ยวกับความสามารถในการอ่านกับสิ่งที่ไม่ใช่รหัสนั้นไม่มีประโยชน์เนื่องจากการศึกษาเหล่านั้นถือว่าข้อความวิ่ง โค้ดมีลักษณะแตกต่างกันอย่างสิ้นเชิงกับความยาวบรรทัด (อักขระ) ที่แตกต่างกันทุกบรรทัด และแม้ว่าคุณจะเขียนจนถึงจุดสิ้นสุดของบรรทัดการย่อหน้าจะเปลี่ยนจำนวนอักขระต่อบรรทัด
Corvince

111

การรักษารหัสของคุณเป็นมนุษย์ที่อ่านได้ไม่เพียง แต่สามารถอ่านได้ในเครื่อง อุปกรณ์จำนวนมากยังคงสามารถแสดงได้ครั้งละ 80 ตัวอักษรเท่านั้น นอกจากนี้ยังช่วยให้ผู้ที่มีหน้าจอขนาดใหญ่ขึ้นทำงานหลายงานได้ง่ายขึ้นด้วยความสามารถในการตั้งค่าหน้าต่างหลายบานให้อยู่เคียงข้างกัน

ความสามารถในการอ่านยังเป็นหนึ่งในสาเหตุของการเยื้องบรรทัดที่บังคับใช้


58
ใช่ได้รับ แต่ทำไม 79 ทำไมไม่ 100 หรือ 120 การเก็บสิ่งต่าง ๆ ที่อ่านได้ใช้งานได้ทั้งสองวิธี การอ่านโค้ดที่ขึ้นและลงมากเกินไปก็ยากที่จะเข้าใจเช่นกัน
pcorcoran

17
เป็นความจริงที่อุปกรณ์จำนวนมากสามารถแสดงได้เพียง 80 ตัวอักษร มีกี่คนที่ไม่สามารถทำการตัดแบบอ่อนได้
Jim

39
นอกจากนี้ขอแนะนำให้ไม่มีการตัดโค้ด จากมุมมองประสบการณ์ผู้ใช้มันเป็นสิ่งที่ยอมรับไม่ได้สำหรับคนส่วนใหญ่
Justin Bozonier

8
มีระบบปฏิบัติการบางระบบเช่น MVS ซึ่งไม่สามารถรองรับบรรทัดที่ยาวเกิน 72 อักขระได้ PEP-8 จะไม่ช่วยที่นี่ การตั้งค่าขีด จำกัด โดยพลการของ 79 ตัวอักษรนั้นไม่มีเหตุผลเนื่องจากวิธีการที่อักขระต่อบรรทัดดีขึ้นอยู่กับตัวแก้ไขจอภาพการกำหนดลักษณะส่วนบุคคลของผู้ใช้และอื่น ๆ
codymanix

96
ตัวอักษร 79 ตัวทำให้โปรแกรมเมอร์ใช้ชื่อตัวแปรและชื่อฟังก์ชั่นที่สั้นลงเพื่อทำให้ทุกอย่างลงตัว สิ่งนี้ไม่ดีสำหรับการอ่าน
Gert Steyn

46

ฉันเป็นโปรแกรมเมอร์ที่ต้องจัดการกับรหัสจำนวนมากในแต่ละวัน โอเพ่นซอร์สและสิ่งที่ได้รับการพัฒนาในบ้าน

ในฐานะโปรแกรมเมอร์ฉันคิดว่ามันมีประโยชน์ที่จะเปิดไฟล์หลายไฟล์พร้อมกันและมักจะจัดระเบียบเดสก์ท็อปของฉันบนหน้าจอ (จอกว้าง) เพื่อให้ไฟล์ต้นฉบับสองไฟล์อยู่เคียงข้างกัน ฉันอาจจะเขียนโปรแกรมทั้งสองหรือเพียงแค่อ่านอย่างใดอย่างหนึ่งและการเขียนโปรแกรมในอื่น ๆ

ฉันพบว่ามันไม่น่าพอใจและน่าผิดหวังเมื่อไฟล์ต้นฉบับตัวใดตัวหนึ่งมีความกว้าง> 120 ตัวอักษรเพราะมันหมายความว่าฉันไม่สามารถใส่โค้ดลงบนบรรทัดของหน้าจอได้อย่างสบาย ๆ มันพลิกการจัดรูปแบบเป็นการตัดบรรทัด

ฉันพูดว่า '120' เพราะนั่นคือระดับที่ฉันจะรำคาญกับรหัสที่กว้างกว่า หลังจากนั้นหลายตัวละครคุณควรแยกข้ามเส้นเพื่อให้อ่านได้ง่าย

ฉันเขียนโค้ดโดยคำนึงถึง 80 คอลัมน์ นี่เป็นเพียงเพื่อว่าเมื่อฉันรั่วไหลข้ามขอบเขตนั้นมันไม่ได้เป็นสิ่งที่เลวร้าย


11
"ฉันเขียนโค้ดที่มี 80 คอลัมน์ในใจนี่เป็นเพียงเพื่อที่ว่าเมื่อฉันจะรั่วไหลผ่านขอบเขตที่ว่ามันไม่ได้เป็นสิ่งที่เลวร้าย" เหมือนกับฉัน.
KobeJohn

4
10 ปีต่อมา: นั่นไม่ได้ขึ้นอยู่กับว่าคุณตั้งค่าการตัดบรรทัด การพันบรรทัดอาจเป็นแบบฉลาดหรือโง่ได้ตามที่คุณต้องการ หากไม่สะดวกในการอ่านนั่นเป็นเพียงความล้มเหลวในการแก้ไขของคุณ
David Mulder

2
ฉันเขียนโค้ดถึง 120 ตัวอักษร แต่บางครั้งก็นานขึ้นเมื่อมันเหมาะกับการอ่าน รูปแบบสีดำที่ 120 ถ้าคุณบอกให้ PEP-8 ยังกล่าวว่า"ไม่เป็นไรที่จะเพิ่มขีดจำกัดความยาวบรรทัดสูงสุดถึง 99 อักขระ"แต่ผู้คนดูเหมือนจะปราบปรามข้อมูลส่วนใหญ่ เกือบไม่มีใครใช้เทอร์มินัลที่มีความกว้าง 80 ข้อความบันทึกจะไม่กว้าง 80
NeilG

37

ฉันเชื่อว่าคนที่เรียนเกี่ยวกับวิชาการพิมพ์จะบอกคุณว่า 66 ตัวอักษรต่อบรรทัดนั้นควรจะเป็นความกว้างที่อ่านได้มากที่สุดสำหรับความยาว อย่างไรก็ตามหากคุณต้องการดีบักเครื่องจากระยะไกลผ่านเซสชัน ssh เทอร์มินัลส่วนใหญ่จะมีค่าเริ่มต้นที่ 80 ตัวอักษร 79 พอดีพอดีพยายามทำงานกับสิ่งที่กว้างขึ้นกลายเป็นความเจ็บปวดที่แท้จริงในกรณีเช่นนี้ คุณจะประหลาดใจด้วยจำนวนนักพัฒนาที่ใช้หน้าจอ vim + เป็นสภาพแวดล้อมแบบวันต่อวัน


<flame> Emacs FTW! </flame> +1 ฉันคิดว่าขีด จำกัด 79 มาจากยุคแรก ๆ ของ UNIX (และอาจเป็นไปได้หลายทาง) ที่มีเทอร์มินัลตัวอักษร 80x25
Joe D

10
ssh + screen + vim environemnts ของฉันไม่มีปัญหาในการแสดงเส้นยาว
chrishiestand

54
"66 ตัวอักษรต่อบรรทัดนั้นควรจะเป็นความกว้างที่อ่านได้มากที่สุดสำหรับความยาว" ฉันคิดว่าเราควรเขียนโค้ดใน 2 หรือ 3 คอลัมน์เนื่องจากเป็นวิธีการวางหนังสือพิมพ์
Mark E. Haase

23
@mehaase: คำพูดประชดประชันของคุณค่อนข้างใกล้เคียงกับความจริง: บรรณาธิการที่ดีสามารถแยกบานหน้าต่างและแสดงสิ่งต่าง ๆ แบบเคียงข้างกัน (จากไฟล์เดียวกันหรือไฟล์อื่น) บังเอิญนี้มักจะเป็นไปได้ก็ต่อเมื่อมีรหัสมาตรฐานเส้นความยาว ...
nperson325681

2
@mehaase: ฟังดูยอดเยี่ยมจริงๆ ฉันไม่ได้ล้อเล่น.
Teekin

19

การพิมพ์แบบอักษร monospaced ที่ขนาดเริ่มต้นคือ (บนกระดาษ A4) 80 คอลัมน์คูณ 66 บรรทัด


11
ฉันยอมรับมาตรฐานนี้ มันถูกต้อง แต่ใครเป็นคนพิมพ์รหัสอีกต่อไป? นอกจากนี้ใครเป็นคนพิมพ์รหัสจากสภาพแวดล้อมที่ไม่ยอมแพ้การปรับขนาดหรือตัวเลือกการจัดรูปแบบอื่น ๆ เมื่อครั้งสุดท้ายที่ทุกคนที่คุณรู้จักถูกนิ่งงันโดยไม่สามารถแสดงบรรทัด 100 ตัวอักษร?
pcorcoran

3
ทำไมคนพิมพ์รหัสในปี 2012 สิ่งนี้ทำให้ฉันนึกถึงการเข้าร่วมการประชุมเทคโนโลยีและการส่งกระเป๋าและวัสดุพิมพ์ที่เต็มไปด้วยการนำเสนอ มันคือคนในศตวรรษที่ 21: ส่งอีเมลภาพนิ่งหรืออื่น ๆ ที่ส่งกระเป๋าและแฟ้มไปที่หลุมฝังกลบ
Mark E. Haase

2
แล้วทำไม 80-1 ถึงดีกว่า 80-0 หรือ 80-2?
n611x007

11
"ตามขนาดเริ่มต้น" คุณพูดไหม บอกฉันเพิ่มเติมเกี่ยวกับขนาดเริ่มต้นที่เป็นที่ยอมรับในระดับสากลเหล่านี้
Bruno Bronosky

15
ใช่มาจัดลำดับความสำคัญของวิธีการที่รหัสดูบนกระดาษที่พิมพ์เหนือสิ่งอื่นใด
Jonathan

8

นี่คือเหตุผลว่าทำไมฉันถึงชอบตัวละคร 80 ตัว: ที่ทำงานฉันใช้ Vim และทำงานกับไฟล์สองไฟล์ต่อครั้งที่มอนิเตอร์ทำงานอยู่ฉันคิดว่า 1680x1040 (ฉันจำไม่ได้) หากบรรทัดมีอีกต่อไปฉันมีปัญหาในการอ่านไฟล์แม้เมื่อใช้การตัดคำ จำเป็นต้องพูดฉันเกลียดการจัดการกับรหัสของคนอื่นเพราะพวกเขาชอบสายยาว ๆ


คุณไม่ใช้เป็นกลุ่มสำหรับ javascript / html เช่นกัน?
เงิน elad

2
@eladsilver ฉันไม่สามารถคิดออกว่าเป็นเรื่องตลก? :-D
Steven Church

ขออภัยไม่ลึกซึ้งมากกับ vim เห็นได้ชัดว่าถ้าคุณทำงานในเว็บคุณใช้มันสำหรับ html / js และประเภทเหล่านั้นไม่เคยมีข้อ จำกัด 80 char เนื่องจากนักพัฒนาส่วนหน้าไม่รู้เกี่ยวกับ pep8 ดังนั้นการ จำกัด python 80-char จะไม่แก้ปัญหาของคุณถ้าคุณใช้ไพ ธ อนมากขึ้นเท่านั้น ดังนั้นสิ่งที่ฉันถามคือคุณจัดการภาษาการเข้ารหัสอื่น ๆ ได้อย่างไร
เงิน elad

ฉันทำงานใน Vim ด้วยอักขระ 120 บรรทัด ฉันใช้: ความแตกต่างกับการแยกตามแนวนอน หากคุณสามารถใส่ได้ 160 ตัวอักษรเท่านั้นใน 1680 พิกเซลคุณจะต้องมีขนาดตัวอักษรขนาดใหญ่
NeilG

4

เนื่องจากช่องว่างมีความหมายเชิงความหมายใน Python วิธีการห่อคำบางคำอาจให้ผลลัพธ์ที่ไม่ถูกต้องหรือคลุมเครือดังนั้นจึงจำเป็นต้องมีข้อ จำกัด บางอย่างเพื่อหลีกเลี่ยงสถานการณ์เหล่านั้น ความยาวบรรทัด 80 ตัวอักษรเป็นมาตรฐานตั้งแต่เราใช้โทรพิมพ์ดังนั้นตัวอักษร 79 ตัวจึงเป็นทางเลือกที่ปลอดภัย


4
การตัดคำมีสองประเภท มีการตัดที่ยากซึ่งเส้นจะแตกด้วยการขึ้นบรรทัดใหม่และมีการตัดแบบนุ่มซึ่งจะแสดงเฉพาะเมื่อมีการหยุดพัก แต่ยังคงเป็นเส้นเดียว ฉันไม่เห็นปัญหาใด ๆ กับหลัง
จิม

4
เครื่องมือ Python ส่วนใหญ่ไม่ทำการตัดคำแบบนุ่มนวลเพราะมันจะสร้างโค้ดที่ยากต่อการอ่านในภาษาที่ช่องว่างและการเยื้องเป็นสิ่งสำคัญ
Chris Upchurch

4
มันไม่ได้สร้างโค้ดที่คลุมเครือหรืออ่านยากตราบใดที่การตัดคำถูกระบุด้วยสายตา เคททำสิ่งนี้และทำงานได้ดี หากผู้แก้ไขไม่จัดการสิ่งนี้แสดงว่าเป็นเหตุผลในการยื่นข้อบกพร่องกับตัวแก้ไขไม่ใช่เหตุผลที่จะกำหนดรูปแบบการเข้ารหัสที่หลีกเลี่ยงข้อบกพร่อง
Jim

5
แม้ว่ามันจะบ่งบอกด้วยสายตา แต่ก็ยังทำให้อ่านยากขึ้นซึ่งเป็นสาเหตุที่ Python Editors ไม่รองรับ
Chris Upchurch

คุณลองใช้งานจริงเป็นระยะเวลานานหรือไม่? ฉันมี. มันไม่ได้ทำให้อ่านรหัสยากขึ้นในประสบการณ์ของฉัน คุณสามารถสำรองการอ้างสิทธิ์ได้หรือไม่ว่านี่คือเหตุผลที่ Python Editors ไม่มีคุณสมบัตินี้ ฉันไม่เคยได้ยินเรื่องนี้มาก่อน
จิม

1

ฉันเห็นด้วยกับจัสติน ในการทำอย่างละเอียดบรรทัดของโค้ดที่ยาวเกินไปนั้นยากต่อการอ่านโดยมนุษย์และบางคนอาจมีความกว้างคอนโซลที่รองรับได้เพียง 80 อักขระต่อบรรทัด

การแนะนำสไตล์อยู่ที่นั่นเพื่อให้แน่ใจว่าโค้ดที่คุณเขียนนั้นสามารถอ่านได้โดยผู้คนให้มากที่สุดเท่าที่จะทำได้บนแพลตฟอร์มให้ได้มากที่สุดและสบายที่สุด


10
นี่เป็นอาร์กิวเมนต์ที่ขี้เกียจ ไม่ใช่กรณีที่ 80 เส้นเป็นอันตรายต่อการอ่าน ภาพรวมอย่างรวดเร็วของ Python codebase ที่ซับซ้อนอย่างสุภาพที่ล้อมรอบที่ 80 บรรทัดแสดงให้เห็นถึงสิ่งที่ตรงกันข้ามอย่างแท้จริง - การตัดฟังก์ชันบรรทัดเดียวไปยังหลายบรรทัดทำให้การติดตาม WTF เกิดขึ้นได้ยากขึ้น
Jonathan

0

เพราะถ้าคุณกดมันเกินกว่าคอลัมน์ที่ 80 นั่นหมายความว่าคุณกำลังเขียนโค้ดที่ยาวและซับซ้อนซึ่งทำมากเกินไป (และคุณควรปรับโครงสร้างใหม่) หรือคุณเยื้องมากเกินไป (และคุณควรปรับโครงสร้าง)


90
-1, ฉันไม่คิดว่าคุณสามารถพูดได้อย่างเด็ดขาดว่าเส้นใด ๆ ที่ผ่านขอบเขต 80 ถ่านต้องมีตัวปรับโครงสร้าง วิธีการเรียนมีการเยื้องสองครั้งเพิ่มอีกย่อหน้าสำหรับ "ถ้า" และอื่น ๆ รายการเข้าใจง่ายและมันเป็นเรื่องง่ายที่จะข้ามเขต 80-char

42
ไม่ต้องพูดถึงว่าหากคุณตั้งชื่อสัญลักษณ์ในลักษณะที่มนุษย์สามารถอ่านได้เช่น "users_directed_graph" แทนที่จะเป็น "usr_dir_gph" ดังนั้นแม้แต่วิ Expression ธรรมดา ๆ ก็จะกินอักขระไม่กี่บรรทัดต่อบรรทัด
Mark E. Haase

8
ฉันพบเสมอใน Python ว่าถ้าฉันมีเกิน 80 ตัวอักษรมันควรหยุดและคิดว่าทำไมถึงเป็นเช่นนั้น การตัดสินใจออกแบบที่ไม่ดีมักเป็นความผิด
Mike Vella

3
นี่เป็นประสบการณ์ของฉันเช่นกัน นอกจากนี้ยังพูดถึงชื่อตัวแปรที่ยาวกว่าตามที่ @mehaase ชี้ให้เห็น แต่ฉันคิดว่านี่เป็นประโยชน์ การรวมกันที่มีอยู่ของสามคำที่ต่อเนื่องกัน (ในกรณีของ "users_directed_graph") จะแคระแกร็นจำนวนขององค์ประกอบที่เหมาะสมพอสมควรในเนมสเปซเดียว ฉันพิจารณาโค้ดที่เก่ากว่าที่ฉันเขียนซึ่งชื่อตัวแปรแบบยาวที่คล้ายกันจำนวนมากอยู่ในเนมสเปซเดียวกันเพื่อให้อ่านได้ยากขึ้นและโดยทั่วไปดีกว่า refactor
TimClifford

4
ในภาษาที่ต้องมีการเยื้องสำหรับการเปลี่ยนแปลงแต่ละขอบเขตการบอกว่า 80 ตัวอักษรเท่ากับความซับซ้อนเป็นอาร์กิวเมนต์ที่ง่ายเกินไป บางครั้ง 80 ตัวอักษรเป็นเพียงสิ่งที่จะเรียกฟังก์ชั่น IDE / บรรณาธิการสมัยใหม่สำหรับภาษาอื่น ๆ ฉลาดพอที่จะจดจำสิ่งนี้และสามารถแยกแยะได้ว่าเมื่อใดที่จะนำไปใช้เมื่อเทียบกับการวางข้อ จำกัด แบบครอบคลุมในทุกสิ่งที่เป็นอันตรายต่อการอ่านโดยรวม
Jonathan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.