Một số tuyên bố dưới đây khá cá nhân, mặc dù với một số biện minh, và có nghĩa là theo cách này.
Các loại bình luận
Đối với phiên bản ngắn gọn ... Tôi sử dụng nhận xét cho:
- theo dõi các bình luận giải thích các trường trong cấu trúc dữ liệu (ngoài các trường đó, tôi không thực sự sử dụng các nhận xét dòng đơn)
- nhận xét nhiều dòng đặc biệt hoặc theo mục đích trên các khối
- tài liệu người dùng công cộng và / hoặc nhà phát triển được tạo từ nguồn
Đọc dưới đây để biết chi tiết và (có thể tối nghĩa) lý do.
Nhận xét
Tùy thuộc vào ngôn ngữ, sử dụng nhận xét một dòng hoặc nhận xét nhiều dòng. Tại sao nó phụ thuộc? Đó chỉ là một vấn đề tiêu chuẩn hóa. Khi tôi viết mã C, tôi thích mã ANSI C89 kiểu cũ theo mặc định, vì vậy tôi thích luôn luôn có /* comments */
.
Do đó, tôi sẽ có phần này trong C hầu hết thời gian và đôi khi (phụ thuộc vào kiểu của cơ sở mã) cho các ngôn ngữ có cú pháp giống như C:
typedef struct STRUCT_NAME {
int fieldA; /* aligned trailing comment */
int fieldBWithLongerName; /* aligned trailing comment */
} TYPE_NAME;
Emacs là tốt đẹp và làm điều đó cho tôi với M-;
.
Nếu ngôn ngữ hỗ trợ nhận xét một dòng và không dựa trên C, tôi sẽ được bao bọc nhiều hơn để sử dụng các nhận xét một dòng. Nếu không, tôi sợ bây giờ tôi đã có thói quen. Điều này không hẳn là xấu, vì nó buộc tôi phải súc tích.
Nhận xét nhiều dòng
Tôi không đồng ý với giới luật của bạn bằng cách sử dụng các nhận xét một dòng cho điều này hấp dẫn trực quan hơn. Tôi sử dụng cái này:
/*
* this is a multi-line comment, which needs to be used
* for explanations, and preferably be OUTSIDE the a
* function's or class' and provide information to developers
* that would not belong to a generated API documentation.
*/
Hoặc đây (nhưng tôi không thường nữa, ngoại trừ trên một codebase cá nhân hoặc chủ yếu để thông báo bản quyền - đây là lịch sử đối với tôi và xuất phát từ nền giáo dục của tôi Thật không may, hầu hết các IDEs vít nó lên khi sử dụng tính năng tự động định dạng.) :
/*
** this is another multi-line comment, which needs to be used
** for explanations, and preferably be OUTSIDE the a
** function's or class' and provide information to developers
** that would not belong to a generated API documentation.
*/
Nếu cần thực sự, sau đó tôi sẽ bình luận nội tuyến bằng cách sử dụng những gì tôi đã đề cập trước đó cho các bình luận theo dõi, nếu nó có ý nghĩa để sử dụng nó trong một vị trí theo dõi. Ví dụ, trong trường hợp trả lại rất đặc biệt hoặc để ghi lại switch
các case
câu lệnh (hiếm gặp, tôi không sử dụng công tắc thường xuyên) hoặc khi tôi ghi lại các nhánh trong if ... else
luồng điều khiển. Nếu đó không phải là một trong số này, thường thì một khối nhận xét nằm ngoài phạm vi phác thảo các bước của hàm / phương thức / khối có ý nghĩa hơn đối với tôi.
Tôi sử dụng những thứ này rất đặc biệt, trừ khi mã hóa bằng ngôn ngữ mà không hỗ trợ cho nhận xét tài liệu (xem bên dưới); trong trường hợp họ trở nên phổ biến hơn. Nhưng trong trường hợp chung, nó thực sự chỉ để ghi lại những thứ dành cho các nhà phát triển khác và là những bình luận nội bộ thực sự cần phải thực sự nổi bật. Chẳng hạn, để ghi lại một khối trống bắt buộc như khối "bắt buộc" catch
:
try {
/* you'd have real code here, not this comment */
} catch (AwaitedException e) {
/*
* Nothing to do here. We default to a previously set value.
*/
}
Điều này đã xấu đối với tôi nhưng tôi sẽ chịu đựng trong một số trường hợp.
Bình luận tài liệu
Javadoc & al.
Tôi thường sử dụng chúng trên các phương thức và lớp để ghi lại các phiên bản giới thiệu một tính năng (hoặc thay đổi nó) đặc biệt nếu đó là API công khai và để cung cấp một số ví dụ (với các trường hợp đầu vào và đầu ra rõ ràng và các trường hợp đặc biệt). Mặc dù trong một số trường hợp, một trường hợp đơn vị có thể tốt hơn để ghi lại những điều này, các bài kiểm tra đơn vị không nhất thiết phải là con người có thể đọc được (cho dù bạn sử dụng DSL-thingy nào).
Họ sửa lỗi cho tôi một chút để ghi lại các trường / thuộc tính, vì tôi thích các bình luận theo dõi cho điều này và không phải tất cả các khung tạo tài liệu đều hỗ trợ các bình luận tài liệu theo dõi. Doxygen chẳng hạn, nhưng JavaDoc thì không, điều đó có nghĩa là bạn cần một nhận xét hàng đầu cho tất cả các lĩnh vực của mình. Mặc dù vậy, tôi có thể tồn tại điều đó, vì dù sao đi nữa, các dòng Java tương đối dài, do đó, một nhận xét kéo dài sẽ làm tôi khó chịu bằng cách mở rộng dòng vượt quá ngưỡng chịu đựng của tôi. Nếu Javadoc từng cân nhắc việc cải thiện điều đó, thì tôi sẽ hạnh phúc hơn rất nhiều.
Mã nhận xét
Tôi chỉ sử dụng một dòng cho một lý do duy nhất, bằng các ngôn ngữ giống như C (trừ khi biên dịch cho C nghiêm ngặt, nơi tôi thực sự không sử dụng chúng): để bình luận nội dung trong khi mã hóa. Hầu hết các IDE sẽ phải chuyển đổi các nhận xét một dòng (được căn chỉnh trên thụt lề hoặc trên cột 0) và phù hợp với trường hợp sử dụng đó đối với tôi. Sử dụng chuyển đổi cho các nhận xét nhiều dòng (hoặc chọn ở giữa các dòng, đối với một số IDE) sẽ khiến việc chuyển đổi giữa nhận xét / không chú ý trở nên khó khăn hơn.
Nhưng vì tôi chống lại mã nhận xét trong SCM, điều đó thường tồn tại rất ngắn vì tôi sẽ xóa các đoạn bình luận trước khi cam kết. (Đọc câu trả lời của tôi cho câu hỏi này về "các bình luận và SCMs được chỉnh sửa" )
Bình luận kiểu
Tôi thường có xu hướng viết:
- hoàn thành các câu với ngữ pháp chính xác (bao gồm cả dấu câu) để nhận xét tài liệu, vì chúng được cho là sẽ được đọc sau trong tài liệu API hoặc thậm chí là một phần của hướng dẫn được tạo.
- được định dạng tốt nhưng lỏng lẻo hơn về dấu câu / mũ cho khối nhận xét nhiều dòng
- khối theo dõi mà không có dấu chấm câu (vì không gian và thường vì nhận xét là ngắn gọn, đọc giống như một câu lệnh được ngoặc đơn)
Một lưu ý về lập trình biết chữ
Bạn có thể muốn có hứng thú với Lập trình biết chữ , như được giới thiệu trong bài viết này của Donald Knuth .
Mô hình lập trình biết chữ, [...] thể hiện sự tránh xa việc viết chương trình theo cách thức và trật tự được áp đặt bởi máy tính, và thay vào đó cho phép các lập trình viên phát triển các chương trình theo yêu cầu logic và dòng chảy suy nghĩ của họ. 2 Các chương trình biết chữ được viết như một sự giải thích logic không bị gián đoạn trong một ngôn ngữ thông thường của con người, giống như văn bản của một bài tiểu luận [...].
Các công cụ lập trình biết chữ được sử dụng để có được hai biểu diễn từ tệp nguồn biết chữ: một công cụ phù hợp để biên dịch hoặc thực thi thêm bằng máy tính, mã "rối" và một cách khác để xem dưới dạng tài liệu được định dạng, được cho là "dệt" từ nguồn biết chữ.
Như một lưu ý phụ và ví dụ: Khung JavaScript underscore.js , mặc dù không tuân thủ phong cách nhận xét của tôi, là một ví dụ khá hay về một cơ sở mã tài liệu tốt và một nguồn chú thích được định dạng tốt - mặc dù có thể không sử dụng tốt nhất như một tài liệu tham khảo API).
Đây là những quy ước cá nhân . Vâng, tôi có thể là lạ (và bạn cũng có thể như vậy). Không sao, miễn là bạn tuân thủ và tuân thủ các quy ước về mã của nhóm của bạn khi làm việc với các đồng nghiệp, hoặc không tấn công triệt để sở thích của họ và sống chung một cách độc đáo. Đó là một phần trong phong cách của bạn và bạn nên tìm ra ranh giới giữa việc phát triển một phong cách mã hóa xác định bạn là một lập trình viên (hoặc là người theo trường phái tư tưởng hoặc tổ chức mà bạn có kết nối) và tôn trọng sự thống nhất của một nhóm .
:3,7 Align //
để căn chỉnh các bình luận trên các dòng 3-7.