Các nghiên cứu về độ rộng mã tối ưu?


131

Nếu bạn bật "Xem đúng lề" trong IDE bạn chọn, có khả năng nó sẽ mặc định là 80 ký tự. Tôi có xu hướng thay đổi nó thành 120 mà không có lý do nào khác ngoài đó là tiêu chuẩn tại một công ty mà tôi đã ở một vài năm trước, và không có công ty nào khác bảo tôi làm điều đó khác đi.

Câu hỏi của tôi là, có nghiên cứu nào thực sự cho thấy 80 ký tự là độ rộng tối đa tối ưu cho khả năng đọc mã hay giá trị này chỉ là "đó là cách nó luôn luôn" và không ai thực sự biết tại sao lại như vậy? Và, chiều rộng của một dòng mã có phải là một phần của tiêu chuẩn mã hóa của bạn không?


1
Mặc dù tôi không biết về bất kỳ nghiên cứu nào, bạn sẽ tìm thấy nhiều ý kiến ​​như câu trả lời cho câu hỏi này: * Có lý do hợp lệ nào để thực thi độ rộng tối đa 80 ký tự trong tệp mã, ngày và tuổi này không?
Adam Bellaire

3
không có nghiên cứu nào tôi biết nhưng bạn có thể thấy thú vị khi xem xét các tiêu chuẩn mã hóa dự án khác nhau. Ví dụ: Google có 80 ký tự. ( code.google.com/p/google-styleguide ) trong khi WebKit (ala Apple?) không có giới hạn AFAIK ( webkit.org/coding/coding-style.html ). Mozilla dường như là 80 ( developer.mozilla.org/En/Mozilla_Coding_Style_Guide#Line_length )
gman

Nó giống như lý do chúng ta đánh vần "Bureaucrat" theo cách chúng ta làm. Bởi vì từ lâu ai đó đã định nghĩa một tiêu chuẩn cho lý do có thể có hoặc không có ý nghĩa vào thời điểm đó. Để đánh vần, đó là một niềm đam mê đáng ngờ với tiếng Latin, với mã kích thước của một thẻ đục lỗ giấy. Sau đó, một phương pháp được dán nhãn "chính xác". Và các quan chức nhỏ đã thực thi các tiêu chuẩn kể từ đó.
Tuntable

Câu trả lời:


116

Trên thực tế, điều 80 cột dài trước DOS. Nó xuất phát từ những cú đấm thẻ, là thiết bị 80 cột.

Và để trả lời câu hỏi của OP, một "nghiên cứu" đã diễn ra được khoảng 600 năm nay - cuốn sách in. Những điều này đã phát triển qua nhiều thế kỷ, với ý nghĩa dễ đọc nhất, đến vị trí chúng ta đang ở hiện tại nơi độ dài dòng trung bình cho văn bản là khoảng 60 ký tự. Vì vậy, để dễ đọc, hãy cho các lề hẹp hơn.


85
Tôi thực sự không tin rằng bạn có thể so sánh việc đọc ngôn ngữ tự nhiên với việc đọc một ngôn ngữ lập trình về khả năng sử dụng.
Frug

25
@Frug - thực sự, bạn có thể có thể. Lý do cho độ rộng 65 ký tự không phải vì không thể đọc được các dòng lớn hơn, nhưng đó là một cung quá chặt khi mắt di chuyển sang dòng tiếp theo. Bạn có thể khắc phục điều này bằng cách tăng chiều cao của dòng, nhưng điều đó khiến việc sử dụng khoảng cách khối để truyền đạt ý nghĩa trở nên khó khăn hơn, vì vậy đây có lẽ là điều cần tránh trong IDE.
Jimmy Breck-McKye

32
@Jim - Ngôn ngữ tự nhiên của tôi không chứa các từ có 30 ký tự trong đó (không phải là cách tôi sử dụng) và nó phân tích cú pháp hoàn toàn khác với ngôn ngữ lập trình. Bạn thường có thể nhóm một dòng mã tách biệt với phần còn lại, có thể là một điều kiện dài hoặc kết hợp các phương thức và lớp dài. Kết hợp điều này với thụt lề và so sánh giữa hai ngôn ngữ trở nên vô lý. Tôi chắc chắn rằng bất cứ ai nghiên cứu một cách khoa học khả năng đọc và độ dài dòng sẽ phản đối việc bạn rửa qua những khác biệt.
Frug

10
@Frug - Tôi thực sự không thấy sự phản đối của bạn liên quan đến bất kỳ khiếu nại nào tôi đưa ra, nhưng tôi có thể thấy rằng sự thụt lề phá vỡ mô hình mà tôi đang đề xuất. Đừng gọi tôi là 'Jim', mặc dù.
Jimmy Breck-McKye

17
Một cuốn sách thường được đặt gần mắt hơn nhiều so với màn hình, điều đó có nghĩa là cho phép ít ký tự trên mỗi dòng hơn nếu người đọc có thể đọc sách mà không cần phải vắt cổ. Một màn hình thường không được đặt ở khoảng cách của một cuốn sách, điều đó có nghĩa là có thể sử dụng nhiều ký tự hơn trên mỗi dòng trong khi giữ trong giới hạn của góc mắt tối đa. Ngoài ra, mã không được đọc nhiều như được sử dụng, làm cho chiều rộng này ít quan trọng hơn. I (YMMV) có thể dễ dàng theo dõi đường dây với 120 ký tự của đang trên màn hình máy tính xách tay của tôi, nhưng điều này là quá rộng cho 2 emacs bộ đệm trên của tôi máy tính xách tay 15" , than ôi.
Obscaenvs

104

Xin thương xót những lập trình viên phải duy trì phần mềm của bạn sau này và tuân theo giới hạn 80 ký tự.

Những lý do để thích 80:

  • Có thể đọc được với phông chữ lớn hơn trên máy tính xách tay

  • Để lại không gian cho hai phiên bản cạnh nhau để so sánh

  • Để lại không gian cho các chế độ xem điều hướng trong IDE

  • In mà không tự ý ngắt dòng (cũng áp dụng cho email, trang web, ...)

  • Hạn chế sự phức tạp trong một dòng

  • Giới hạn thụt lề mà lần lượt giới hạn độ phức tạp của các phương thức / hàm

Vâng, nó phải là một phần của tiêu chuẩn mã hóa.


10
Đây là những lý do tuyệt vời để giữ độ rộng dòng đến 80 ký tự hoặc ít hơn. Tôi thực sự ngạc nhiên (thất vọng) rằng câu trả lời của bạn, được suy nghĩ rõ ràng và chính xác, đã không nhận được nhiều điểm hơn. Trong danh sách này, tôi sẽ thêm: (1) cuộn ngang không có gì thú vị. (2) Bạn có thể tăng đáng kể mật độ của mã bạn đang làm việc bằng cách xem mã đó trong nhiều thuộc địa. Rất nhiều bất động sản sẽ lãng phí khi bạn có một vài dòng kéo dài sang bên phải khi hầu hết các dòng khác không có.
Donnie Cameron

4
ok nhưng điều gì xảy ra khi có một khối mã với vài vết lõm? điều đó đã xảy ra với tôi và 80 nhân vật không vui chút nào.
EKanadily

14
Limits the complexity in one lineTôi không chắc tại sao lan truyền sự phức tạp trên nhiều dòng là tốt hơn. Nó chỉ đẩy nhiều hơn vào ngăn xếp tinh thần của bạn.
Jonathan

4
Đây là một chủ đề rất cũ. nhưng bạn vẫn đồng ý rằng vô số nhà phát triển sử dụng màn hình 27 inch :-). Tôi có nghĩa là nếu tầm nhìn là một vấn đề một màn hình lớn hơn có thể giúp đỡ. 8 năm trước, chúng tôi vẫn đang làm việc trên màn hình 17 hoặc 20 inch và một số độ phân giải 4: 3.
Mathijs Segers

1
@MathijsSegers bất kể kích thước màn hình hoặc độ phân giải, vẫn thoải mái hơn để giữ văn bản trong phạm vi 30 độ giữa tầm nhìn của bạn. Khi làm việc với nhiều cửa sổ mở trong màn hình cạnh nhau, tôi có xu hướng quay đầu để nhìn từ cái này sang cái khác. Một người không nên quay đầu hoặc đảo mắt hết cỡ để đọc từ đầu này sang đầu kia. Rất nhiều mắt hoặc quay đầu nhanh có thể sẽ gây ra chứng chóng mặt nếu được thực hiện cả ngày.
maurice

41

Tôi không có nghiên cứu, nhưng tôi sẽ liên quan đến kinh nghiệm của tôi.

Tôi thấy rằng cuộn ngang là tẻ nhạt khi xử lý văn bản. Tôi nhìn vào môi trường mà mã sẽ được sử dụng và đặt các tiêu chuẩn về chiều rộng dựa trên bối cảnh đó.

Ví dụ, khi tôi làm việc trong Emacs trên XWindows, nó luôn hoạt động tốt khi có 2 cửa sổ Emac bên cạnh nhau mọi lúc. Điều đó giới hạn chúng ở 80 ký tự, vì vậy đó là độ dài dòng tối đa của tôi.

Tại một thời điểm tôi đã làm việc trong Visual Studio trên màn hình 1920x1200. Tôi sẽ giữ nó tối đa hóa, với tất cả các cửa sổ công cụ được neo xuống một bên. Có đủ không gian còn lại cho hai cửa sổ biên tập cạnh nhau với khoảng 100 ký tự.

Tôi cũng thấy rằng các dòng dài nhất đến từ các cuộc gọi phương thức với danh sách tham số dài . Đây đôi khi là một mùi mã : có lẽ phương pháp nên được tái cấu trúc .

Nếu bạn và các lập trình viên của bạn có màn hình độ phân giải cao và thị lực sắc nét, bằng mọi cách, hãy sử dụng một phông chữ nhỏ và các dòng dài. Ngược lại, bạn có thể cần các dòng ngắn.


1
cộng với một cho "đôi mắt sắc nét" bởi vì thực sự đó là những gì đã xảy ra với tôi.
EKanadily

26

Tôi thường sử dụng 120-150 trừ khi công ty mô tả khác. Tuy nhiên, nó cũng phụ thuộc vào loại mã:

  • Tôi (hầu như) không bao giờ sử dụng nhiều câu lệnh trên một dòng
  • Tôi chỉ sử dụng các dòng dài (> 12) chỉ khi các dòng trông tương tự có thể được căn chỉnh và không bị phá vỡ.
  • Tôi luôn luôn sử dụng đủ không gian / dấu ngoặc đơn, v.v.
  • Tôi thích tên biến dài hơn tên ngắn hơn

Cho đến vài năm trước tôi đã giới hạn ở mức 100 nhưng bây giờ màn hình rộng thường được sử dụng và màn hình độ phân giải cao 120 thậm chí có thể được nhìn thấy trên máy tính xách tay (mà tôi hầu như không sử dụng).

So sánh một màn hình với một cuốn sách không thực sự tốt vì một cuốn sách có nhiều không gian dọc hơn và một màn hình có nhiều không gian ngang hơn. Tôi luôn cố gắng giữ một chức năng tối đa. Một màn hình dài có thể nhìn thấy.


6
Làm thế nào để 120-150 ký tự trên mỗi dòng hoạt động với việc có nhiều cửa sổ mở cạnh nhau? Bạn có giữ nhiều cửa sổ soạn thảo mã mở cạnh nhau không? - Trên màn hình 30 '' của tôi, tôi có thể có 3 cửa sổ cạnh nhau, nếu tôi giới hạn các dòng của mình ở mức 97 ký tự / dòng.
KajMagnus

1
Tôi mã trên một màn hình lớn và tôi cũng thích số tiền lớn hơn. Tôi nhắm tới 110-130. Một trong những mục tiêu chính của tôi là khả năng đọc và chia nhỏ các câu thành 2-3 dòng đôi khi theo tôi là ít đọc hơn. Thỉnh thoảng tôi cũng sẽ chuyển đến 500-1000 để ẩn rác mà tôi không muốn xem, chẳng hạn như một số bình luận, mã bị vô hiệu hóa và một số giá trị được mã hóa cứng. Tôi nghĩ rằng nó cũng phụ thuộc vào các lập trình viên. Nếu hầu hết các lập trình viên hoạt động ở mức 80 thì tốt nhất nên nhắm đến điều đó khi làm việc với mã được chia sẻ.
Sunsetquest

10

Có lẽ 80 ký tự cũng là một điểm tốt để tránh các chuỗi getter xấu này:

object.getFoo().getBar().getFooBar().get ...

nếu bạn giới hạn ở mức 80 ký tự, có thể ai đó sẽ bản địa hóa các biến này và kiểm tra null, v.v., nhưng có lẽ hầu hết các lập trình viên sẽ để chúng được xếp ở hàng tiếp theo. tôi không biết

Bên cạnh đó, 80 nhân vật là tuyệt vời như starblue đã đề cập. Điều này chắc chắn sẽ đi vào các tiêu chuẩn mã hóa.


5
FYI, phương pháp xâu chuỗi quá mức như thế này được gọi là mô hình chống đắm tàu .
Dennis

4

Bỏ qua các hạn chế về phần cứng và bất kỳ sự khác biệt nào trong cách chúng ta đọc mã so với ngôn ngữ tự nhiên, tôi thấy ba lý do chính để giới hạn các dòng trong khoảng 80 ký tự.

  1. Nhãn cầu của con người là tròn, không thực sự hẹp và rộng, và hầu hết độ phân giải của chúng nằm ở giữa . Khi đọc hàng giờ liền sẽ thoải mái hơn rất nhiều khi quét mắt theo các cung ngắn, sử dụng một thanh cuộn khi cần thiết. Tôi không biết về một nghiên cứu chính thức cụ thể về mức độ dễ đọc của mã, nhưng từ những quan sát của riêng tôi, với màn hình cách đó 2 feet, với văn bản có kích thước ở phông chữ đơn cách 10pt, 100 ký tự chiếm khoảng 1/3 trường ngang của tôi tầm nhìn, hoặc khoảng 60 độ ( bên ngoài 30 độ hoặc hơn trong đó tất cả độ phân giải của mắt chúng ta ).
  2. Hầu hết mọi người sử dụng một màn hình lớn tại nơi làm việc để họ có thể nhìn thấy nhiều thứ mà không cần nhấp qua lại, không phải để họ có thể thấy một thứ thực sự lớn.
  3. Các dòng ngắn hơn chứa ít phức tạp hơn, hy vọng buộc nhà phát triển phải chia nhỏ để biến mã của họ thành các đơn vị dễ tiêu hóa hơn.

3

Tôi nhớ rất rõ việc đọc ở đâu đó (tôi nghĩ đó là trong Tài liệu Agile ) rằng để dễ đọc tối ưu, chiều rộng của tài liệu phải là khoảng hai chữ cái, hoặc 60-70 ký tự. Tôi nghĩ rằng chiều rộng dòng của các thiết bị đầu cuối cũ xuất phát một phần từ quy tắc đánh máy cũ.


3

Tùy chọn lề phải được dự định để hiển thị cho bạn độ rộng của trang nếu bạn định in mã và đã đăng trước đó cho biết nó được đặt thành 80 vì đó là chiều dài dòng trước đây là GUI trước khi quay lại cú đấm thẻ.

Gần đây tôi đã thấy một đề xuất trên một số blog (không thể nhớ blog nào) để tăng kích thước phông chữ IDE của bạn để cải thiện chất lượng mã, logic đằng sau đó là nếu ít mã phù hợp trên màn hình, bạn sẽ viết các dòng ngắn hơn và chức năng đồ trang sức.

Theo tôi, các dòng ngắn hơn giúp việc đọc mã và gỡ lỗi dễ dàng hơn, vì vậy tôi cố gắng giữ các dòng ngắn, nếu bạn phải đặt giới hạn để tự viết mã tốt hơn thì hãy chọn những gì phù hợp với bạn - cũng như nếu bạn làm việc hiệu quả hơn các dòng dài hơn cảm thấy thoải mái để tăng kích thước trang và mã chỉ trên một màn hình rộng.


1

Như một số người đã chỉ ra trong các câu trả lời khác, lý do giới hạn 80 ký tự là một phần lịch sử (thẻ đục lỗ, màn hình nhỏ, máy in, v.v.) và một phần sinh học (để theo dõi dòng nào bạn nói chung là tốt để có thể nhìn thấy toàn bộ dòng mà không cần quay đầu).

Điều đó nói rằng, xin hãy nhớ rằng chúng ta vẫn là con người và chúng ta xây dựng các công cụ để giải quyết những hạn chế của chính mình. Tôi đề nghị bạn bỏ qua toàn bộ cuộc tranh luận về giới hạn ký tự và chỉ viết những thứ có ý nghĩa bất kể độ dài của chúng và sử dụng IDE hoặc trình soạn thảo văn bản có thể giúp bạn theo dõi các dòng chính xác. Sử dụng cùng một đối số để thụt lề trong các tab so với không gian tranh luận, cũng như mức độ thụt lề nên tôi đề nghị bạn sử dụng một dấu thụt lề (phổ biến nhất là tab) và chỉ cần mọi người định cấu hình IDE hoặc trình soạn thảo văn bản của riêng họ để hiển thị chúng khi họ thấy thoải mái nhất với họ.

Việc gắn bó với một số lượng ký tự cố định trên mỗi dòng sẽ luôn khiến mọi thứ tệ hơn cho mọi người trừ đối tượng được nhắm mục tiêu. Điều đó nói rằng, nếu bạn sẽ không bao giờ chia sẻ mã, bao giờ; sau đó thực sự không có lý do gì để bắt đầu cuộc thảo luận này. Nếu bạn muốn chia sẻ mã, có lẽ bạn nên để mọi người tự quyết định những gì họ muốn thay vì ép buộc những lý tưởng của bạn (hoặc ai đó elses) đối với họ.


0

Theo hiểu biết của tôi, 80 ký tự được sử dụng làm tiêu chuẩn mã hóa để duy trì khả năng tương thích với các trình soạn thảo dòng lệnh (độ rộng thiết bị đầu cuối mặc định thường là 80 ký tự). Với các IDE hiện đại và độ phân giải màn hình lớn, 80 ký tự có lẽ không phải là "tối ưu", nhưng đối với nhiều nhà phát triển, việc duy trì khả năng đọc trong thiết bị đầu cuối là điều cần thiết. Vì lý do đó, không có khả năng chiều rộng 80 ký tự sẽ được thay thế làm tiêu chuẩn thực tế cho độ rộng mã bất cứ lúc nào sớm. Và để trả lời câu hỏi cuối cùng của bạn, vâng, độ rộng mã cũng như bất kỳ đặc điểm nào khác sẽ ảnh hưởng đến khả năng đọc mã của bạn nên được giải quyết trong các tiêu chuẩn mã hóa của bạn.

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.