Tại sao PEP-8 chỉ định độ dài dòng tối đa 79 ký tự? [đóng cửa]


235

Tại sao trong thiên niên kỷ này, Python PEP-8 phải chỉ định độ dài dòng tối đa 79 ký tự?

Khá nhiều trình soạn thảo mã dưới ánh mặt trời có thể xử lý các dòng dài hơn. Làm gì với gói nên là sự lựa chọn của người tiêu dùng nội dung, không phải là trách nhiệm của người tạo nội dung.

Có bất kỳ lý do chính đáng (hợp pháp) nào để tuân thủ 79 ký tự trong thời đại này không?


72
Câu trả lời cho câu hỏi của bạn là trong PEP-8.
cdleary

28
Độ dài dòng ngắn hơn nâng cao năng suất bằng cách tăng KLOC của bạn. : p
Alex

26
Giới hạn 79 ký tự đã hoàn toàn lỗi thời. Bất kỳ cơ sở mã phức tạp khiêm tốn nào cũng cho thấy cách nó làm cho mã khó đọc hơn nhiều. Ví dụ: github.com/openstack/nova/blob/master/nova/network/manager.py
Jonathan

6
@Jonathan: có vẻ ổn với tôi ...
nperson325681

9
Không phải mọi người sử dụng các công cụ tìm khác nhau?
endolith

Câu trả lời:


128

Phần lớn giá trị của PEP-8 là để ngăn mọi người tranh luận về các quy tắc định dạng không quan trọng và tiếp tục viết mã tốt, được định dạng nhất quán. Chắc chắn, không ai thực sự nghĩ rằng 79 là tối ưu, nhưng không có lợi ích rõ ràng nào khi thay đổi nó thành 99 hoặc 119 hoặc bất kỳ chiều dài dòng ưa thích của bạn là gì. Tôi nghĩ các lựa chọn là: tuân theo quy tắc và tìm ra nguyên nhân đáng giá để đấu tranh hoặc cung cấp một số dữ liệu chứng minh mức độ dễ đọc và năng suất thay đổi theo độ dài dòng. Điều thứ hai sẽ vô cùng thú vị, và tôi sẽ có cơ hội tốt để thay đổi suy nghĩ của mọi người.


28
Hầu hết các nghiên cứu đọc được thực hiện trong inch và không phải ký tự trên mỗi dòng. Quy tắc 66 ký tự dựa trên các nghiên cứu được thực hiện để đọc báo. Các nghiên cứu gần đây đã chỉ ra rằng khi đọc các bài báo trực tuyến, tốc độ đọc tăng lên khoảng 120 ký tự trên mỗi dòng (10 inch ở cỡ chữ 12) mà không mất khả năng hiểu.
Pace

7
Trên thực tế tất cả những người đọc vào chủ đề đó đều nghĩ rằng 79 ký tự là tối ưu. Đó là lý do tại sao nó được thêm vào PEP8! Câu trả lời này thực sự sai. Đây là một trong những chính xác
erikbwork

6
Tôi nghĩ câu hỏi là tại sao 79 tốt hơn 80 hoặc 78
n611x007

157
there's no obvious gain in changing it to 99 or 119 or whatever your preferred line length is Điều này là sai ở rất nhiều cách. Bọc một dòng ở 40 ký tự và cho tôi biết nó dễ đọc như thế nào. Rõ ràng là ít gói hơn = dễ đọc hơn miễn là bạn có không gian màn hình, mà năm 2015, bạn làm. Bao bọc tác động dễ đọc. Khả năng đọc tác động đến khả năng bảo trì. Bảo trì ảnh hưởng đến chất lượng. Và chất lượng bị ảnh hưởng nếu bạn gói 80 ​​ký tự. Dấu chấm.
Jonathan

6
Tranh luận về khả năng đọc với bất cứ thứ gì không phải là mã là vô ích vì những nghiên cứu giả định chạy văn bản. Mã trông hoàn toàn khác nhau với độ dài dòng (ký tự) khác nhau mỗi dòng. Và ngay cả khi bạn viết cho đến cuối dòng, thụt lề sẽ thay đổi số lượng ký tự trên mỗi dòng.
Corvince

111

Giữ mã của bạn con người có thể đọc được không chỉ máy có thể đọc được. Rất nhiều thiết bị vẫn chỉ có thể hiển thị 80 ký tự cùng một lúc. Ngoài ra, nó giúp mọi người có màn hình lớn hơn dễ dàng thực hiện đa tác vụ hơn bằng cách có thể thiết lập nhiều cửa sổ để cạnh nhau.

Khả năng đọc cũng là một trong những lý do cho việc thụt dòng bắt buộc.


58
Vâng, được cấp. Nhưng tại sao 79? Tại sao không phải 100 hay 120? Giữ mọi thứ có thể đọc được cả hai cách. Quá nhiều việc đọc mã lên xuống cũng khó để mò mẫm quá.
pcorcoran

17
Đúng là rất nhiều thiết bị chỉ có thể hiển thị 80 ký tự. Bao nhiêu trong số chúng không thể thực hiện gói mềm?
Jim

39
Ngoài ra, nó được ưa thích để không có mã bọc. Từ góc độ trải nghiệm người dùng, hầu hết không thể chấp nhận được.
Justin Bozonier

8
Có một số hệ điều hành như MVS không thể xử lý các dòng dài hơn 72 ký tự. PEP-8 sẽ không giúp đỡ ở đây. Đặt giới hạn tùy ý 79 ký tự sẽ không có ý nghĩa vì cách các ký tự trên mỗi dòng tốt tùy thuộc vào trình chỉnh sửa, màn hình, sở thích cá nhân của người dùng, v.v.
codymanix

96
79 ký tự cũng làm cho các lập trình viên sử dụng các tên hàm và biến khó hiểu ngắn hơn để làm cho mọi thứ phù hợp. Điều này là xấu cho khả năng đọc.
Gert Steyn

46

Tôi là một lập trình viên phải đối phó với rất nhiều mã hàng ngày. Nguồn mở và những gì đã được phát triển trong nhà.

Là một lập trình viên, tôi thấy hữu ích khi mở nhiều tệp nguồn cùng một lúc và thường tổ chức máy tính để bàn của mình trên màn hình (màn hình rộng) để hai tệp nguồn nằm cạnh nhau. Tôi có thể lập trình ở cả hai, hoặc chỉ đọc một và lập trình ở cái kia.

Tôi thấy không hài lòng và bực bội khi một trong những tệp nguồn đó có chiều rộng> 120 ký tự, vì điều đó có nghĩa là tôi không thể thoải mái đặt một dòng mã trên một dòng màn hình. Nó đảo lộn định dạng để bọc dòng.

Tôi nói '120' vì đó là mức mà tôi sẽ cảm thấy khó chịu khi mã rộng hơn. Sau nhiều ký tự đó, bạn nên chia thành các dòng để dễ đọc, chứ đừng nói đến các tiêu chuẩn mã hóa.

Tôi viết mã với 80 cột trong tâm trí. Đây chỉ là để khi tôi rò rỉ qua ranh giới đó, nó không phải là một điều xấu.


11
"Tôi viết mã với 80 cột trong tâm trí. Điều này chỉ để khi tôi rò rỉ qua ranh giới đó, đó không phải là một điều tồi tệ." Tương tự cho tôi.
KobeJohn

4
10 năm sau: Không chỉ phụ thuộc vào cách bạn thiết lập gói hàng. Gói hàng có thể thông minh hoặc ngu ngốc như bạn muốn. Nếu cảm thấy khó chịu khi đọc thì đó chỉ là một thất bại của biên tập viên của bạn.
David Mulder

2
Tôi mã đến 120 ký tự nhưng đôi khi lâu hơn khi nó phù hợp với khả năng đọc. Định dạng màu đen ở 120 nếu bạn nói với nó. PEP-8 cũng cho biết "không thể tăng giới hạn độ dài dòng lên tới 99 ký tự" nhưng mọi người dường như loại bỏ thông tin đó nhiều lần. Hầu như không ai sử dụng thiết bị đầu cuối rộng 80. Thông điệp tường trình không bao giờ rộng 80.
NeilG

37

Tôi tin rằng những người nghiên cứu kiểu chữ sẽ cho bạn biết rằng 66 ký tự trên một dòng được cho là chiều rộng dễ đọc nhất về chiều dài. Mặc dù vậy, nếu bạn cần gỡ lỗi máy từ xa qua phiên ssh, hầu hết các thiết bị đầu cuối mặc định là 80 ký tự, 79 chỉ phù hợp, cố gắng làm việc với bất cứ điều gì rộng hơn sẽ trở thành nỗi đau thực sự trong trường hợp như vậy. Bạn cũng sẽ ngạc nhiên bởi số lượng nhà phát triển sử dụng màn hình vim + như một môi trường hàng ngày.


<ngọn lửa> Emacs FTW! </ Flame> +1, mặc dù. Tôi nghĩ rằng giới hạn 79 xuất phát từ những ngày đầu của UNIX (và có thể là MULTICS) có các thiết bị đầu cuối 80x25 ký tự.
Joe D

10
Ssh + screen + vim môi trường của tôi không có vấn đề gì khi hiển thị các dòng dài.
chrishiestand

54
"66 ký tự trên một dòng được cho là chiều rộng dễ đọc nhất về chiều dài" Tôi cho rằng chúng ta nên viết mã trong 2 hoặc 3 cột, vì đó là cách các tờ báo được trình bày?
Đánh dấu E. Haase

23
@mehaase: nhận xét châm biếm của bạn khá gần với sự thật: các biên tập viên đàng hoàng có thể chia các bảng và hiển thị các nội dung khác nhau cạnh nhau (từ các tệp giống nhau hoặc khác nhau). Thật trùng hợp, điều này thường chỉ khả thi khi mã có tiêu chuẩn độ dài dòng ...
nperson325681

2
@mehaase: Thật tuyệt vời. Tôi không đùa.
Teekin

19

In một phông chữ đơn cách ở kích thước mặc định là (trên giấy A4) 80 cột bằng 66 dòng.


11
Tôi chấp nhận tiêu chuẩn này; nó hợp lệ Nhưng ai in mã nữa? Hơn nữa, ai in mã từ một môi trường không dung nạp tỷ lệ hoặc các tùy chọn định dạng khác? Lần cuối cùng bất cứ ai mà bạn biết bị bối rối là do họ không thể kết xuất một dòng 100 ký tự?
pcorcoran

3
Tại sao mọi người in mã vào năm 2012? Điều này nhắc nhở tôi về việc đi đến một hội nghị công nghệ và được trao một cái túi và một cuốn sổ in đầy đủ các bài thuyết trình. Đó là những người ở thế kỷ 21: gửi e-mail cho tôi các slide hoặc túi khác và chất kết dính đang đi thẳng vào bãi rác.
Đánh dấu E. Haase

2
vậy tại sao 80-1 tốt hơn 80-0 hay 80-2?
n611x007

11
"ở kích thước mặc định" Bạn nói gì? Cho tôi biết thêm về các kích thước mặc định được chấp nhận phổ biến này.
Bruno Bronosky

15
Có, hãy ưu tiên cách mã nhìn trên giấy in hơn tất cả những thứ khác.
Jonathan

8

Đây là lý do tại sao tôi thích 80 ký tự với: tại nơi làm việc, tôi sử dụng Vim và làm việc trên hai tệp cùng lúc trên một màn hình đang chạy, tôi nghĩ, 1680x1040 (tôi không bao giờ có thể nhớ). Nếu các dòng dài hơn, tôi gặp khó khăn khi đọc các tập tin, ngay cả khi sử dụng gói từ. Không cần phải nói, tôi ghét phải đối phó với mã của người khác vì họ yêu thích hàng dài.


bạn không sử dụng vim cho javascript / html à?
bạc elad

2
@eladsilver Tôi không thể làm việc nếu đó là một trò đùa? :-D
Nhà thờ Steven

xin lỗi, không sâu sắc lắm với vim, rõ ràng nếu bạn làm việc trên web, bạn cũng sử dụng nó cho html / js và những loại đó không bao giờ có giới hạn 80 char vì các nhà phát triển giao diện người dùng không biết về pep8, vì vậy, giới hạn python là 80-char Sẽ không giải quyết vấn đề của bạn nếu bạn sử dụng nhiều hơn thì chỉ dùng python. Vì vậy, những gì tôi đang hỏi là làm thế nào để bạn xử lý các ngôn ngữ mã hóa khác?
bạc elad

Tôi làm việc trong Vim với 120 dòng ký tự. Tôi sử dụng: diffthis với chia ngang. Nếu bạn chỉ có thể điều chỉnh 160 ký tự trên 1680 pixel, bạn phải có cỡ chữ lớn.
NeilG

4

Vì khoảng trắng có ý nghĩa ngữ nghĩa trong Python, một số phương pháp gói từ có thể tạo ra kết quả không chính xác hoặc mơ hồ, do đó cần có một số giới hạn để tránh những tình huống đó. Độ dài dòng 80 ký tự là tiêu chuẩn kể từ khi chúng tôi sử dụng teletypes, vì vậy 79 ký tự có vẻ như là một lựa chọn khá an toàn.


4
Có hai loại gói từ khác nhau. Có gói cứng, trong đó các dòng được chia ra với dòng mới, và có gói mềm, trong đó chúng chỉ được hiển thị với các dấu ngắt, nhưng vẫn duy trì một dòng duy nhất. Tôi không thấy bất kỳ vấn đề với cái sau.
Jim

4
Hầu hết các trình soạn thảo Python không thực hiện gói từ mềm vì nó tạo ra mã khó đọc mơ hồ trong một ngôn ngữ trong đó khoảng trắng và thụt lề là quan trọng.
Chris Up nhẫn

4
Nó không tạo ra mã mơ hồ hoặc khó đọc miễn là gói được xác định trực quan bằng cách nào đó. Kate làm điều này và nó hoạt động tốt. Nếu một trình soạn thảo không xử lý việc này, thì đó là lý do để báo lỗi cho trình soạn thảo, không phải là lý do để áp đặt kiểu mã hóa để tránh lỗi.
Jim

5
Ngay cả khi nó được chỉ ra một cách trực quan, nó vẫn khiến mã khó đọc hơn nhiều, đó là lý do tại sao các trình soạn thảo Python thường không hỗ trợ nó.
Chris Up nhẫn

Bạn đã thực sự thử nó trong một khoảng thời gian dài chưa? Tôi có. Nó không làm cho mã khó đọc hơn theo kinh nghiệm của tôi. Bạn có thể sao lưu xác nhận rằng đây là lý do tại sao các trình soạn thảo Python không bao gồm tính năng này không? Tôi chưa bao giờ nghe yêu cầu đó trước đây.
Jim

1

Tôi đồng ý với Justin. Để giải thích, con người quá dài, mã khó đọc hơn và một số người có thể có chiều rộng bàn điều khiển chỉ chứa 80 ký tự trên mỗi dòng.

Đề xuất kiểu là có để đảm bảo rằng mã bạn viết có thể được đọc bởi nhiều người nhất có thể trên càng nhiều nền tảng càng tốt và thoải mái nhất có thể.


10
Đây là một lập luận lười biếng. Không phải lúc nào 80 dòng cũng gây hại cho khả năng đọc. Nhìn lướt qua bất kỳ cơ sở mã Python phức tạp khiêm tốn nào kết thúc ở 80 dòng thực sự chứng minh điều ngược lại - rằng việc gọi hàm đơn dòng đến một số dòng khiến việc theo dõi WTF trở nên khó khăn hơn.
Jonathan

0

bởi vì nếu bạn đẩy nó ra khỏi cột thứ 80, điều đó có nghĩa là hoặc bạn đang viết một dòng mã rất dài và phức tạp, quá nhiều (và vì vậy bạn nên cấu trúc lại) hoặc bạn thụt quá nhiều (và vì vậy bạn nên cấu trúc lại).


90
-1, tôi không nghĩ bạn có thể nói một cách cụ thể rằng bất kỳ dòng nào vượt qua ranh giới 80 char đều cần một bộ tái cấu trúc. Các phương thức lớp đã được thụt lề hai lần, thêm một lần thụt lề khác cho "nếu", v.v. và một sự hiểu biết danh sách đơn giản, và thật dễ dàng để vượt qua ranh giới 80 char.

42
Chưa kể rằng nếu bạn đặt tên cho các ký hiệu theo cách mà chúng có thể đọc được ở người, ví dụ: "users_directed_graph" thay vì "usr_dir_gph", thì ngay cả một biểu thức đơn giản cũng sẽ ăn khá nhiều ký tự trên mỗi dòng.
Đánh dấu E. Haase

8
Tôi đã luôn tìm thấy trong Python rằng nếu tôi vượt quá 80 ký tự thì nên dừng lại và suy nghĩ về lý do tại sao. Thông thường quyết định thiết kế xấu là có lỗi.
Mike Vella

3
Kinh nghiệm của tôi cũng đã như vậy. Nó cũng giải quyết các tên biến dài hơn, như @mehaase chỉ ra, nhưng tôi nghĩ đây là một lợi ích. Các kết hợp có sẵn của ba từ liên tiếp (trong trường hợp "users_directed_graph") lùn số lượng thành phần phù hợp một cách hợp lý vào một không gian tên duy nhất. Tôi xem xét mã cũ hơn mà tôi đã viết trong đó nhiều tên biến dài tương tự nằm trong cùng một không gian tên sẽ khó đọc hơn và thường tốt hơn để cấu trúc lại.
TimClifford

4
Trong một ngôn ngữ yêu cầu thụt lề cho mỗi thay đổi phạm vi, nói rằng 80 dòng ký tự tương đương với độ phức tạp là một đối số quá đơn giản. Đôi khi 80 ký tự chỉ là những gì nó cần để gọi một hàm. Các trình soạn thảo / IDE hiện đại cho các ngôn ngữ khác đủ thông minh để nhận ra điều này và có thể nhận ra khi nào nên thay vì đặt các hạn chế về chăn lên mọi thứ gây hại cho khả năng đọc nói chung.
Jonathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.