Làm thế nào để bạn sử dụng các dòng trống trong mã của bạn?


31

Đã có một vài nhận xét về khoảng trắng đã được thảo luận về các vị trí niềng răng xoăn.

Bản thân tôi có xu hướng rắc mã của mình bằng các dòng trống trong nỗ lực phân tách những thứ đi cùng nhau trong các nhóm "hợp lý" và hy vọng giúp người tiếp theo dễ dàng đọc mã tôi vừa tạo.

Trong thực tế, tôi sẽ nói rằng tôi cấu trúc mã của mình giống như tôi viết: Tôi tạo các đoạn văn, không dài hơn một vài dòng (chắc chắn ngắn hơn 10) và cố gắng làm cho mỗi đoạn văn tự khép kín.

Ví dụ:

  • trong một lớp, tôi sẽ nhóm các phương thức đi cùng nhau, trong khi tách chúng bằng một dòng trống từ nhóm tiếp theo.
  • nếu tôi cần viết bình luận tôi thường đặt một dòng trống trước bình luận
  • trong một phương thức, tôi tạo một đoạn văn cho mỗi bước của quy trình

Nói chung, tôi hiếm khi có hơn 4/5 dòng được nhóm lại với nhau, có nghĩa là một mã rất thưa thớt.

Tôi không coi tất cả khoảng trắng này là lãng phí vì tôi thực sự sử dụng nó để cấu trúc mã (thực tế là tôi sử dụng thụt đầu dòng), và do đó tôi cảm thấy nó xứng đáng với giá trị màn hình.

Ví dụ:

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

    array[i] += 2;
}

Tôi xem xét hơn hai tuyên bố có mục đích riêng biệt rõ ràng và do đó xứng đáng được tách ra để làm cho nó rõ ràng.

Vì vậy, làm thế nào để bạn thực sự sử dụng (hoặc không) các dòng trống trong mã?


6
if (i % 3 != 0) { <newline here> array[i] += 2; <newline here> }, nhưng tôi thấy quan điểm của bạn :)
Merlyn Morgan-Graham

Những loại câu hỏi không mang tính xây dựng . Chỉ có rất nhiều lần bạn có thể viết lại hai câu trả lời duy nhất là "có" và "không".

1
Một câu hỏi tốt hơn sẽ là làm thế nào và tại sao bạn sử dụng các dòng trống? Tôi sử dụng các dòng trống chính xác giống như bạn làm, với cùng một động lực.
Dominique McDonnell

1
@Mark, @takeshin: xin lỗi, quên "cách" trong từ khóa. Rõ ràng là tất cả chúng ta đều sử dụng chúng, tôi đã cố gắng xem nó được sử dụng như thế nào bởi những người ngoài kia (tách lớp, nếu / khác, v.v.) nhưng có vẻ như tôi đã nhận được câu trả lời rất chung chung: p
Matthieu M.

3
for (int i = 0; i < 10; i += 3) { <newline here> array[i] += 2; <newline here> }nhưng tôi thấy quan điểm của bạn :)
Berin Loritsch 22/03/2016

Câu trả lời:


87

Luôn luôn

Khoảng trắng là rất quan trọng để làm sạch mã có thể đọc được. Một dòng trống (hoặc hai) giúp phân tách trực quan các khối mã logic.

Ví dụ: từ Hoàn thành mã của Steve McConnell, Chương thứ hai về Bố cục và Phong cách:

Các đối tượng đạt điểm cao hơn từ 20 đến 30 phần trăm trong bài kiểm tra mức độ hiểu khi các chương trình có sơ đồ thụt hai đến bốn không gian so với khi các chương trình không có thụt đầu dòng.Nghiên cứu tương tự cho thấy điều quan trọng là không nhấn mạnh hoặc nhấn mạnh quá mức cấu trúc logic của chương trình. Điểm hiểu thấp nhất đã đạt được trên các chương trình hoàn toàn không thụt lề. Thấp nhất thứ hai đã đạt được trên các chương trình sử dụng thụt sáu không gian. Nghiên cứu kết luận rằng thụt hai đến bốn không gian là tối ưu. Thật thú vị, nhiều đối tượng trong thí nghiệm cảm thấy rằng vết lõm sáu không gian dễ sử dụng hơn so với các vết lõm nhỏ hơn, mặc dù điểm của họ thấp hơn. Đó có lẽ là do sáu vết lõm không gian trông đẹp mắt. Nhưng bất kể nó trông đẹp thế nào, vết lõm sáu không gian hóa ra lại ít đọc hơn. Đây là một ví dụ về sự va chạm được mười hai hấp dẫn thẩm mỹ và dễ đọc.


12
Tôi có thể nghe ai đó nói "nhưng sau đó bạn nên Trích xuất Phương pháp!". Một đoạn dành cho khi không có đủ lý do để trích xuất Phương thức.
Frank Shearar

1
Thật dễ dàng để thử nghiệm và xem liệu có tốt hơn để có khoảng trắng dọc hay không. Lấy một tệp nguồn mà bạn không biết, xóa tất cả các dòng trống, sau đó thử làm theo logic. Ngay cả khi thụt lề đúng cách, nó sẽ bị kiệt sức về mặt tinh thần bởi vì các dòng trống cho chúng ta cơ hội nhìn thấy mọi thứ trong khối kích thước cắn. Tôi phải duy trì một số mã không sử dụng nhiều khoảng trống dọc hoặc thụt lề, vì vậy thêm nó là một trong những nhiệm vụ đầu tiên của tôi để tự bảo quản.
Tin Man

2
Tôi đồng ý 100%. Khoảng trắng rất hữu ích khi nó được sử dụng để phân tách mã có chủ ý trong các đoạn logic. Tuy nhiên, khoảng trắng vì lợi ích của khoảng trắng cũng tệ như không có khoảng trắng. Một đồng nghiệp cũ thích đặt một hoặc nhiều dòng trống sau hầu hết mọi dòng mã thực tế. Tôi đã dành một khoảng thời gian vô lý để "tái cấu trúc" liên quan đến việc nhấn Backspace vài nghìn lần để xóa các dòng trống vô dụng.
Mike Spross

Tôi đã thêm một số dữ liệu để hỗ trợ vị trí của bạn. Xem: meta.programmers.stackexchange.com/questions/1109/ trộm
Jeff Atwood

2
Dữ liệu đó không nói gì về các dòng trống, chỉ về thụt lề ..
Blorgbeard


13

Tôi làm nhưng tôi chắc chắn rằng tôi làm tài liệu bằng cách đặt

(This line intentionally left blank.)

trên đường dây


1
Các dòng trắng với các bình luận có thể thu hút sự chú ý từ mã
JulioC

1
Đó là rất nhiều ý kiến ​​nói rằng "Dòng này cố ý để trống" ... Bạn không thể cho rằng nếu một dòng trống, nó là cố ý nếu không nó sẽ không thông qua đánh giá mã?
thay thế

43
Có lẽ đó chỉ là tôi, nhưng tôi cho rằng OP đang đùa ...
JSB

7
Bạn làm việc cho IBM được bao lâu rồi?
Guillaume

12

Có, nhưng tôi không lạm dụng nó.

Tôi đã thấy mã trong đó mỗi dòng mã bên trong một phương thức được phân tách bằng một dòng trống và hai dòng trống được sử dụng khi xảy ra sự phân tách logic. Điều đó chỉ làm cho nó thậm chí ít đọc hơn theo ý kiến ​​của tôi. Tôi cũng đã thấy khoảng trắng được sử dụng để sắp xếp điên rồ, chẳng hạn như:

//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)
{
    ...
}

Việc lạm dụng cùng một khoảng trắng ngang có thể được áp dụng cho khoảng trắng dọc. Giống như bất kỳ công cụ, sử dụng nó một cách khôn ngoan.


1
Trông giống như một cái gì đó sẽ được sử dụng trong một khóa học đại học cấp độ giới thiệu để điều khiển một số khái niệm. Điều này thực sự được sử dụng trong một môi trường chuyên nghiệp?
rjzii

1
@Rob: Nó được sử dụng trong mã sản xuất của một hệ thống lớn, nhưng không có tiêu đề nhận xét và có các thân phương thức đủ lớn để căn chỉnh làm tôi bối rối, vì tôi không thể thấy các chữ ký phương thức khác trong tệp đó. Khi tôi thu gọn phần thân của các phương thức, tôi có thể thấy "lý do" cho khoảng trắng.
Allon Guralnek

Điều đó có thể hoạt động trong một tệp tiêu đề hoặc giao diện
Ming-Tang

Vì vậy, anh chàng đã viết sơ đồ thụt lề đó, khi anh ta thêm một phương thức mới vào một lớp và kiểu trả về của phương thức dài hơn bất kỳ kiểu trả về hiện có nào, anh ta sẽ lập lại bảng thụt khoảng trắng cho tất cả các phương thức khác trong lớp học?
Mike Clark

@Mike, ở trường trung học, chúng tôi đã sử dụng một cuốn sách lập trình Java (không thể nhớ lại tiêu đề) khuyên bạn không bao giờ nên sử dụng khoảng cách ngang như thế này, đơn giản vì nó đã lãng phí một lượng lớn thời gian khi bạn phải thực hiện lại các bảng đó.
Matthew Flaschen

5

Tôi bị chỉ trích rất nhiều vì đã viết mã theo cách này. Tôi không hiểu tại sao mọi người sẽ không làm theo cách này.

Khả năng đọc rất quan trọng khi bạn quay lại dự án sau một khoảng thời gian dài và tôi đã nghe một câu nói "Luôn viết mã nếu anh chàng tiếp theo đang đọc nó là một kẻ thái nhân cách biết vị trí của bạn".


Giả định mà bạn đưa ra là việc giải nén mã của bạn sẽ giúp dễ đọc và tôi không nghĩ đó luôn là điều được đưa ra.
Jason Baker

Jason nói gì. Khi tôi quay trở lại một cơ sở mã, tôi muốn có càng nhiều LỘC trên mỗi màn hình càng tốt để tôi có thể tiêu hóa nó nhanh chóng. Nếu ai đó đặt vào nửa trang khoảng trắng (hoặc thần cấm một trong những bình luận kiểu xml khủng khiếp đó), tôi sẽ rất muốn định dạng lại nó chỉ để đọc nó, sau đó undomột vài lần để thực hiện công việc (định dạng cuộc chiến don Sẽ không dẫn đến năng suất, vì vậy tôi sẽ không xóa hoàn toàn các bình luận và khoảng trắng, nhưng phần lớn sở thích của tôi là chống lại chúng).
Inaimathi

Một bức tường của Văn bản gần như không thể đọc được, nói gì đến tâm sinh lý của con người có xu hướng chống lại nó. Tôi nghĩ rằng dành thời gian để nhóm các câu lệnh tương tự lại với nhau, nhóm các dòng mã thao tác cùng một biến cũng tốt. Tôi đoán Đó là tất cả sở thích, nhưng tôi nghĩ rằng bất cứ điều gì được thực hiện trong doanh nghiệp này không bao giờ nên được thực hiện nhanh chóng.
Bryan Harrington

5

Tôi không phải lúc nào cũng viết phần mềm, nhưng khi tôi làm, tôi sử dụng các dòng trống cho rõ ràng.


4
Tôi cũng thường viết phần cứng, sau đó in nó. Nó rẻ hơn rất nhiều.
Tim Post

5
Trò đùa Dos Equis?
Paperjam

@Tim Trên thực tế, điều đó không vui lắm: in 3D ;) (Và rất hay, chúng tôi không phải là người nói tiếng Anh bản địa ở đây :).
takeshin

1
@takeshin Tôi không chọc ai cả, và tôi đang ám chỉ việc in 3D. Mặc dù đúng, bình luận có ý nghĩa trong trò đùa, tôi nghĩ rằng bạn có thể hiểu sai ý định :) Ngoài ra, thực tế là @Paperjam đã bình luận ngay dưới một trò đùa về in ấn là .. tốt .. vô giá :)
Tim Post

Tôi không viết phần mềm nhưng cứng cáp nó.
mlvljr

5

Tôi là tất cả để làm cho mã càng rõ ràng càng tốt và khoảng trắng thường là một công cụ hữu ích trong nỗ lực đó. Nhưng đừng quên tái cấu trúc:

  • trong một lớp, tôi sẽ nhóm các phương thức đi cùng nhau, trong khi tách chúng bằng một dòng trống từ nhóm tiếp theo.

Vì bạn có một vài thành viên liên quan, họ là một ứng cử viên cho một lớp mới.

  • nếu tôi cần viết bình luận tôi thường đặt một dòng trống trước bình luận

Bất cứ khi nào mã không đủ rõ ràng để muốn nhận xét, tôi hỏi liệu tôi có thể cấu trúc lại để làm cho mã đủ rõ ràng để không cần bình luận không.

  • trong một phương thức, tôi tạo một đoạn văn cho mỗi bước của quy trình

Tại sao không tạo một phương thức cho mỗi "đoạn"?

Nếu bạn kết thúc với một loạt các phương thức trong lớp của bạn, hãy xem ghi chú của tôi ở trên về việc trích xuất một lớp mới.


5

Vâng. Nó làm cho nó dễ dàng hơn để quét một tập tin. Trong số những thứ khác, nó làm cho nó rõ ràng hơn dòng bình luận đi với.

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

Tôi sử dụng các dòng trống một cách tiết kiệm và nhất quán, và nhất quán là quan trọng hơn một cách tiết kiệm. Tuy nhiên:

  • Nếu mỗi dòng mã được phân tách từ dòng tiếp theo bởi một dòng trống, có quá nhiều dòng trống.
  • Nếu không có vần hay lý do nào dễ nhận thấy ở nơi đặt các dòng trống, thì chúng là một sự phân tâm và thường có quá nhiều trong số chúng.
  • Nếu một hàm quá lớn đến mức nó cần nhiều dòng trống thì nó quá lớn.
  • Nếu một khối mã cần nhiều hơn một dòng trống trước hoặc sau nó, có một cái gì đó sai lệch nghiêm trọng.
  • Nếu bạn có nhiều hơn hai dòng trống giữa các hàm, có thể bạn có quá nhiều dòng trống.

Hầu hết trong số đó không gây tranh cãi khủng khiếp; những gì sau có thể được. Tôi lưu ý rằng ký hiệu K & R với dấu ngoặc nhọn ở cuối dòng thường bị theo sau bởi một dòng trống. Cá nhân tôi không thích niềng răng ở cuối dòng và trộn nó với một dòng trống sau khi niềng răng tạo ra một sự vô nghĩa của ký hiệu (IMNSHO). Đặt dấu ngoặc mở trên dòng tiếp theo, và bạn có một dòng hầu hết trống (và, IMNSHO, mã dễ đọc hơn). Nếu bạn phải sử dụng nẹp K & R ở cuối dòng, đừng lãng phí tiết kiệm không gian theo chiều dọc với các dòng trống bên ngoài.

// 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

Viết đó là dễ đọc nhất và ít ngạc nhiên nhất.

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

Hàm này không cần 12 dòng bình luận doc.

Trong thực tế, nó không cần bất kỳ ý kiến.

Hoặc dòng trống.

Họ sẽ làm mất đi bản chất của nó.


1
Một nhận xét ở đầu mô tả những địa chỉ được chấp nhận sẽ tốt đẹp. Có thể sử dụng một biểu thức chính quy để xác thực địa chỉ Email không?
kevin cline

3

Bên trong chức năng? Ít khi

Nếu tôi có một khối khác biệt rõ ràng thì đó là tái cấu trúc cho một chức năng mới. Nếu một vài trường hợp không xứng đáng.

Đối với tôi, các dòng trống bên trong hàm là một trong những "thực tiễn tốt nhất" sai nhất.


2

Thường

Sử dụng nó cho các khối mã logic được xử lý tương tự. Khi bạn thêm một nhận xét để cho thấy rằng bạn đang thực hiện một bước khác - đó là thời gian để Trích xuất phương pháp.

Khoảng trắng tốt

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

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

    setPosition(x, y);
}

Khoảng trắng xấu

{
    //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);        
}    

đấu với

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

đấu với

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

4
Tôi giả sử ví dụ về khoảng trắng xấu của bạn là phiên bản rút gọn của những gì nên được coi là xấu. Ở độ dài hiện tại của nó, dường như không cần thiết phải chia nó ra.
Allon Guralnek

1
Tôi không hiểu tại sao xấu là xấu cũng như tại sao bạn viết VS

5
Không ai trong số những ý kiến là cần thiết dù sao đi nữa, và tại sao trên thế giới sẽ là một chiết xuất connection.close()đểcloseConnection(connection)
thay thế

Một khối mã với một nhận xét là tốt hơn một phương pháp trích xuất, miễn là các khối ngắn và ít. Phương pháp trích xuất không miễn phí; Nó có một chi phí địa phương mã.
Craig Gidney

Và bạn chỉ cần thực hiện item1item2các biến toàn cục mà các phương thức giao tiếp thông qua? Ôi trời!
TMN

2

Tôi không chỉ sử dụng khoảng trắng, tôi còn sử dụng niềng răng cho rõ ràng.

Niềng răng tôi sử dụng để nói rằng chúng có thể có chức năng.

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

    code()
    code()
}

2

Có một lần, tôi sẽ tự do rắc các dòng trống trong toàn bộ mã của mình. Ngày nay, tôi có xu hướng tiết kiệm hơn. Tôi nghĩ rằng đây là một phần của những gì Steve Yegge đã nói về ở đây :

Hy vọng rằng cảnh tôi đã vẽ cho đến nay giúp bạn hiểu lý do tại sao đôi khi bạn nhìn vào mã và bạn chỉ ghét nó ngay lập tức. Nếu bạn là n00b, bạn sẽ xem mã có kinh nghiệm và nói rằng nó không thể xuyên thủng, vô kỷ luật được viết bởi một người không bao giờ học được những điều cần thiết của công nghệ phần mềm hiện đại. Nếu bạn là một cựu chiến binh, bạn sẽ xem mã n00b và nói rằng nó được bình luận quá mức, lông tơ trang trí mà một thực tập sinh có thể đã viết trong một đêm uống nhiều rượu.

Điểm dính là khả năng chịu nén. Khi bạn viết mã thông qua sự nghiệp của mình, đặc biệt nếu mã đó bao gồm các ngôn ngữ và miền vấn đề rất khác nhau, khả năng nén mã của bạn tăng lên. Không khác gì sự tiến bộ từ việc đọc sách thiếu nhi với văn bản khổng lồ đến tiểu thuyết ngày càng phức tạp với văn bản nhỏ hơn và từ lớn hơn.

...

Một lập trình viên có khả năng chịu nén cao thực sự bị cản trở bởi một màn kể chuyện. Tại sao? Bởi vì để hiểu một cơ sở mã, bạn cần có khả năng đóng gói càng nhiều càng tốt vào đầu. Nếu đó là một thuật toán phức tạp, một lập trình viên kỳ cựu muốn xem toàn bộ sự việc trên màn hình, điều đó có nghĩa là giảm số lượng dòng trống và nhận xét nội tuyến - đặc biệt là các nhận xét chỉ đơn giản nhắc lại những gì mã đang làm. Điều này hoàn toàn ngược lại với những gì một lập trình viên n00b muốn. n00bs muốn tập trung vào một tuyên bố hoặc biểu thức tại một thời điểm, di chuyển tất cả các mã xung quanh nó ra khỏi tầm nhìn để họ có thể tập trung, phát ra tiếng kêu lớn.

Tôi cơ bản đồng ý với anh ta. Sẽ tốt hơn nhiều khi nén mã để bạn có thể lấy càng nhiều mã càng tốt trên một màn hình hơn là để trống quá nhiều. Điều đó không có nghĩa là bạn không bao giờ nên sử dụng các dòng trống. Chỉ là tôi nghĩ trừ khi việc nhóm bạn đang cố gắng tạo ra không làm tăng khả năng đọc vô cùng, nó sẽ gây hại nhiều hơn là tốt.


2

Một giáo sư danh dự đã đưa ra hai lời khuyên tuyệt vời

  1. Khoảng trắng là miễn phí
  2. Đừng sử dụng các mặt hàng chủ lực chọc ngược lên phía trước tờ giấy, nếu không tôi sẽ làm bạn thất vọng.

1

Quy tắc của tôi là:

  1. Nếu tôi gặp khó khăn khi đọc mã tôi đã viết ngày hôm qua, có lẽ tôi cần trích xuất một hoặc ba phương thức.

  2. Nếu định nghĩa lớp của tôi quá dài để đọc dễ dàng, có lẽ tôi cần trích xuất một mô-đun / giao diện / đối tượng.

  3. Định nghĩa phương thức: thêm một dòng

  4. Định nghĩa mô-đun / lớp: thêm hai dòng


1

Tôi thích nghĩ về khoảng trắng giống như đoạn văn. Bạn nhóm các dòng lại với nhau đóng góp cho một ý tưởng.

Nếu bạn đang bắt đầu một ý tưởng mới hoặc một khía cạnh mới của cùng một ý tưởng, bạn bắt đầu một đoạn mới - như thế này.

Trong mã bắt buộc, tôi nhóm các nhiệm vụ thực hiện một nhiệm vụ gắn kết; trong mã khai báo, tôi nhóm các mã lại với nhau để mô tả một tuyên bố gắn kết của một ý tưởng.

Bạn rõ ràng không gặp khó khăn gì khi làm điều đó bằng tiếng Anh (một số người rất kinh khủng với đoạn văn), vì vậy với một chút luyện tập, áp dụng cùng một kỹ năng vào mã nên không có gì khó khăn cả.


1

Theo tôi, các dòng trống là phải. Tôi sử dụng chúng để phân tách các khối mã logic khác nhau. Làm cho mã có thể đọc được. Mã dễ đọc là mã tốt;)

Đoạn mã lý tưởng của tôi sẽ là mỗi khối logic được phân tách bằng một dòng trống và một nhận xét trên đầu mỗi khối có logic chính.

Tất nhiên, nếu mọi người làm điều đó bằng cách thêm nhiều dòng trống ở khắp mọi nơi, tôi thấy điều đó rất khó chịu :(


1

Tôi chỉ sử dụng khoảng trắng trong một hàm / phương thức để phân tách khai báo và mã.

Nếu bạn cảm thấy cần phải có một số dòng để tách các khối mã con thực hiện một số logic, thì chúng nên nhưng trong một phương thức hàm / riêng khác. Tùy thuộc vào trình biên dịch của bạn để không làm cho quá lớn.

thông thường, trong mã peusdo:

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

    CODE
    BLOCK_START
        INITIALIZERS

        CODE
    BLOCK_END
    CODE
end

Nếu tôi thấy khoảng trắng vô dụng, tôi thường co rúm lại.


Trông C-ish, Tiêu chuẩn mã hóa C ++ của tôi khuyên KHÔNG nên khai báo một đối tượng mà không khởi tạo nó, điều này không bao gồm việc sử dụng này: /
Matthieu M.

@Matthieu M: OK, sau đó thay thế KHAI THÁC bằng BAN ĐẦU. Nhưng tôi không bao giờ muốn thấy BAN ĐẦU ở giữa một khối. Nếu nó cần, thì đó là thứ đòi hỏi phạm vi nhỏ hơn, vì vậy nó cần một phương thức / hàm riêng.
haylem

0

Không gian màu trắng vô cùng quý giá.

Đây là thỏa thuận ... những người viết mã phức tạp như E = MC 2 rất tuyệt trong việc thể hiện các kỹ năng lập trình của họ.

Bây giờ, hãy nhảy lên trước sáu tháng, và đó là 2:00 sáng và hệ thống chưa được xem xét trong sáu tháng đã bị hỏng trên chính dòng E = MC 2 . Điều này gần như không thể gỡ lỗi ... tất cả mọi người đang hoảng loạn.

Giả sử mã trông giống như thế này ...

See Dick
See Jane
See Dick and Jan

Nếu đó là 2:00 sáng và mã bị hỏng. Nhìn lướt qua sẽ cho bạn thấy rằng dòng ba nên có

See Dick and Jane

Vấn đề được giải quyết.

Dòng dưới cùng ... sử dụng khoảng trắng.


1
Erm ... không có ví dụ nào trong số này thực sự ủng hộ quan điểm của bạn. Cá nhân, tôi nghĩ rằng E = MC2 dễ đọc hơn E = MC 2 (điểm mấu chốt là sử dụng khoảng trắng, phải không?). Ồ, và trừ khi bạn vẫn còn học trung học, tôi chắc chắn rằng bạn có thể đưa ra một cách tốt hơn để giới thiệu những người mà bạn không đồng ý hơn là "mọt sách".
Jason Baker

@Jason - Điểm tốt lựa chọn từ xấu. E = MC2 dễ đọc hơn nhiều, đó không phải là điểm mà tôi đang cố gắng vượt qua. Nó giống như bạn đang nói về trang web của bạn YAGNI và SYNDI. jasonmbaker.com/tag/programming
Michael Riley - AKA Gunny

0

Như nhiều người khác đã nêu, các dòng trống giúp đọc mã dễ dàng hơn. Tuy nhiên, có một số ngôn ngữ thực thi tiêu chuẩn này. Một thứ mà tôi có thể nghĩ ra khỏi đỉnh đầu (không quá nhiều về các dòng trống nhưng thụt lề thích hợp) là Python.


0

Tôi đồng ý, tôi sử dụng khoảng trắng theo cùng một cách. Tuy nhiên, nếu tôi thấy mình sử dụng khoảng trắng để chia một phương thức thành quá nhiều phần, đó là dấu hiệu tôi có thể cần phải cấu trúc lại mã đó thành nhiều phương thức. Quá nhiều phần logic trong một phương thức có thể báo hiệu rằng phương thức đó sẽ khó kiểm tra hơn.


0

Tôi sử dụng chúng để phân tách mã thành các đơn vị logic. Tôi đã thấy rất ít mẫu mã không sử dụng các dòng trống, tất nhiên là loại bỏ mã hóa.


0

Câu trả lời của Psychopath là tốt nhất, nhưng tôi sẽ thay thế bằng giả định rằng người tiếp theo là một thằng ngốc, và họ sẽ cho rằng bạn là như vậy, và bạn sẽ muốn chứng minh họ sai.

Cũng quan trọng đối với khả năng đọc là việc sử dụng các ý kiến. Tôi mở từng hàm hoặc chương trình con với một khối nhận xét, giải thích bằng văn bản rõ ràng, nó là gì, nó làm gì, các đối số là gì và kết quả mong đợi là gì (bao gồm cả danh sách các điều kiện lỗi). Sau đó, không có câu hỏi về những gì nó được dự định và / hoặc được thiết kế để làm. Những gì nó đạt được có thể khác nhau, nhưng đó là xa hơn theo dõi.

Tôi nghĩ rằng có quá nhiều lập trình viên cho rằng chính họ sẽ thực hiện "sửa chữa" mã, hoặc đơn giản là không quan tâm.


0

Dòng trống là quan trọng. Tuy nhiên, lãng phí toàn bộ một dòng trống trên dấu ngoặc mở làm giảm số lượng mã bạn có thể nhìn thấy trong một màn hình. Nên là:

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

   array[i] += 2;
}

(Đừng để tôi bắt đầu đặt niềng răng '{' trên cùng một dòng với 'cho' ... đó là lướiuggah).


2
VÂNG. Tôi muốn xem toàn bộ chức năng của bạn trên một màn hình. Đừng đặt nẹp xoăn mở trên dòng riêng của nó. Đó là những gì thụt lề là dành cho.
KevBurnsJr

Toàn bộ điểm của một dấu ngoặc trên dòng riêng của nó là để xác định rõ ràng các khối mã. Thêm một dòng mã sau khi cú đúp đang phá hỏng lý do duy nhất tại sao tôn giáo này được tổ chức! Bạn cũng có thể đặt nó trên cùng một dòng với 'cho'.
Gary Willoughby

0

Vâng. Để dễ đọc. Đôi khi tôi thậm chí đặt các dòng trống trong mã mà tôi đã không viết. Tôi thấy việc hiểu mã dễ dàng hơn khi họ có nhóm logic thông qua các dòng trống - như bạn có thể "đọc tốc độ" thông qua nó.


0

Chúng ta nên sử dụng các dòng trống giữa các codeblocks như chúng ta làm khi chúng ta viết một lá thư.

Ví dụ: giữa các hàm hoặc bên trong một hàm khi chúng ta hoàn thành một vòng lặp ...

Mọi người sẽ cảm ơn bạn một mã sạch nếu họ phải bảo trì nó;)


0

Chúng tôi sử dụng khoảng trắng được đề xuất bởi Microsoft StyleCop. Ngoài khả năng đọc và tính nhất quán, tôi thấy rằng (cùng với quy mô lớp nhỏ) được đặt đúng mã giúp quản lý việc hợp nhất dễ dàng hơn khi nhiều người trong một nhóm tình cờ làm việc trên cùng một khu vực.

Tôi không chắc đó chỉ là trí tưởng tượng của mình nhưng các công cụ khác biệt dường như làm tốt hơn việc nhận ra nơi mã tương đương bắt đầu và kết thúc khi hợp nhất khi nó được đặt gọn gàng. Mã đặt ra độc đáo là một niềm vui để hợp nhất. Ok, đó là một lời nói dối - nhưng ít nhất nỗi đau được giữ ở mức có thể kiểm soát được.


0

Không bao giờ là một dòng trống, không phải trong toàn bộ tập tin. Điều đó không có nghĩa là không có vi phạm trong mã:

 code;
 //
 morecode;

Các dòng trống là để mở các phần của mã để làm việc, bạn có một vài phím nóng trong trình soạn thảo để đưa bạn đến dòng trống trước / tiếp theo.

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.