Tại sao /// khối bình luận quan trọng?


49

Ai đó đã từng nói rằng chúng ta nên thêm tiền tố vào tất cả các phương thức của mình bằng các /// <summary>khối nhận xét (C #) nhưng không giải thích lý do.

Tôi bắt đầu sử dụng chúng và thấy chúng làm phiền tôi khá nhiều, vì vậy đã ngừng sử dụng chúng ngoại trừ các thư viện và phương thức tĩnh. Chúng cồng kềnh và tôi luôn quên cập nhật chúng.

Có bất kỳ lý do tốt để sử dụng /// <summary>các khối nhận xét trong mã của bạn?

Tôi thường sử dụng các //bình luận mọi lúc, đó chỉ là các /// <summary>khối tôi đang tự hỏi.


1
Tôi không chắc chắn nếu các khối nhận xét này là sở thích cá nhân hoặc các tiêu chuẩn được đề xuất
Rachel

1
Tôi nghĩ rằng SO là tốt.
Ryan Hayes

30
Tôi nghĩ rằng đây chính xác là loại câu hỏi thuộc về đây. Có một cơ hội tốt rằng điều này sẽ được đóng lại trên stackoverflow là chủ quan.
Paddyslacker

Sử dụng các khối <Tóm tắt> nếu bạn muốn tạo tài liệu. Điều này sẽ có ý nghĩa nếu bạn đang tạo một API cho người khác sử dụng. Làm điều này cho mọi phương pháp là quá mức cần thiết và làm giảm tính linh hoạt của bạn.
Macneil

Câu trả lời:


91

Sử dụng chúng càng nhiều càng tốt.

Vâng, đó là những bình luận đặc biệt trở thành tài liệu cho phương pháp. Nội dung của <summary>, các thẻ tham số, v.v. được tạo sẽ hiển thị trong intellisense khi bạn hoặc người khác chuẩn bị gọi phương thức của bạn. Về cơ bản họ có thể xem tất cả các tài liệu cho phương thức hoặc lớp của bạn mà không cần phải tự đi đến tệp để tìm ra nó làm gì (hoặc cố gắng chỉ đọc chữ ký phương thức và hy vọng điều tốt nhất).


22
+1 Hoàn toàn sử dụng chúng. Bạn sẽ ngạc nhiên về sự hữu ích của việc có chúng nếu bạn sử dụng lại các thành phần của mình và có tất cả các tài liệu tuyệt vời có sẵn trong intellisense.
Walter

4
Ngoài ra nếu bạn đang sử dụng Visual Studio và bắt đầu một dòng với /// ngay trước khi khai báo lớp, phương thức hoặc trường, VS sẽ tạo cấu trúc tài liệu XML cho bạn - bạn chỉ cần điền vào. Tôi đồng ý rằng nó sẽ chiếm rất nhiều không gian trên màn hình của bạn, nhưng đó là một sự thỏa hiệp xứng đáng mà tôi muốn nói. Ngoài ra, F # có một số hỗ trợ tốt hơn cho nó (ví dụ: bạn không phải sử dụng <Tóm tắt> và </ tóm tắt> vì chúng là 'giả định').
ShdNx

7
Bởi vì câu trả lời này đã là sự lựa chọn tốt nhất, tôi sẽ chỉ thêm nhận xét của mình: Khi tôi phát hiện ra rằng bản tóm tắt được sử dụng cho intellisense, và các dự án của tôi đã phát triển đến kích thước hiện tại của chúng, tôi rất vui mừng khi tìm thấy tính năng này. Ghi nhớ các phương thức và các lớp của tôi là gì đã trở thành một thách thức lớn và việc ghi lại mã thông qua cơ chế này đơn giản hóa rất nhiều thứ, cho phép tôi tập trung vào mã mới và khả năng phục hồi thay vì cố gắng nhớ những gì đã thực hiện vài tháng trước.
JYelton

3
Chỉ cần thêm một điều, những bình luận này không được biên dịch vào dll, bạn phải cung cấp tệp xml được liên kết với dll của bạn.
Stewol

Chúng rất hữu ích, nhưng chúng làm cho lớp hiện tại rất khó đọc. Tôi ước có một cách khác mà không làm lộn xộn mã.
Jeroen van Langen

16

Có, hoàn toàn sử dụng chúng cho bất cứ điều gì bạn muốn giữ, hoặc có thể được chia sẻ.

Ngoài ra, sử dụng chúng cùng với Sand CastleTrình tạo tệp trợ giúp của Sand Castle , lấy đầu ra XML và biến nó thành tài liệu đẹp, theo kiểu MSDN.

Nơi cuối cùng tôi làm việc, chúng tôi xây dựng lại tài liệu mỗi tối và lưu trữ nó như một trang chủ nội bộ. Tên viết tắt của công ty là MF, vì vậy nó là MFDN;)

Thông thường mặc dù tôi chỉ tạo một tệp .chm, dễ dàng chia sẻ xung quanh.

Bạn sẽ ngạc nhiên về việc bạn nghiện tài liệu như thế nào khi bạn bắt đầu nhìn thấy nó ở định dạng MSDN!


1
Liên kết đến blog dường như đã chết (bài đăng cuối cùng 5 năm trước với html bị hỏng trên toàn trang) và vị trí của dự án đã di chuyển. Bạn có một liên kết cập nhật cho Sand Castle?

12

Nếu tiêu chuẩn mã hóa của bạn yêu cầu bạn sử dụng các nhận xét đó (và tiêu chuẩn mã hóa cho API hoặc khung có thể yêu cầu điều đó), thì bạn không có lựa chọn nào khác, bạn phải sử dụng các nhận xét đó.

Nếu không, hãy xem xét nghiêm túc không sử dụng ý kiến ​​như vậy. Bạn có thể tránh chúng trong hầu hết các trường hợp bằng cách thay đổi mã của bạn như thế này:

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool SecurityCheck( User user ) {

    }

đến

    /// <summary>
    /// Checks if a user is authorized to access the resource
    /// </summary>
    public bool IsAuthorizedToAccessResource( User user ) {

    }

đến

    public bool IsAuthorizedToAccessResource( User user ) {

    }

11
Mặc dù tôi đồng ý mã nên tự viết tài liệu càng thường xuyên càng tốt, tôi đề nghị sử dụng các loại bình luận này bất cứ khi nào có thể (và thường xuyên hơn so với // bình luận chung chung). /// Các nhận xét XML được thiết kế để hoạt động với IntelliSense, điều này có thể giúp phát triển dễ dàng hơn trong nhiều tháng khi bạn đang cố gắng triển khai một số thư viện bạn đã xây dựng và không hoàn toàn nhớ lại cách thức hoạt động của nó nữa.
Matt DiTrolio

2
Và tôi nghĩ không chỉ từ góc độ Intellisense, từ góc độ tạo tài liệu tự động, các bình luận xml cũng hữu ích. Nhưng như với tất cả các bình luận, điều này chỉ có ý nghĩa nếu bản thân các bình luận đó hữu ích và đang thêm vào mã tự ghi.
Vaibhav

5
Tôi đồng ý rằng khi bạn viết các lớp công khai của API hoặc khung, tiêu chuẩn mã hóa sẽ yêu cầu bạn đưa các nhận xét vào mã để IntelliSense và các công cụ tài liệu có thể cắm vào. Nhưng đó không phải là tất cả mã. Bên cạnh mối quan tâm đó, cách tiếp cận tôi ủng hộ ở đây là, khi bạn cố gắng làm cho mã của mình sạch hơn và rõ ràng hơn, hãy tập trung vào chính mã chứ không phải nhận xét mô tả mã.
azheglov

3
@JYelton: bình luận của bạn nói sai câu trả lời của tôi. Tôi ngụ ý nhiều tên mô tả hơn, nhưng không nhất thiết phải nhiều tên dài dòng hơn, chắc chắn không phải là định danh 60 ký tự cho một chức năng công khai thường được gọi. Ngoài ra, bạn có những gì có vẻ là một chức năng chuyên dụng cao, nhưng nó có một kiểu dữ liệu rất chung (XmlDocument) - đó là một mùi mã. Sau đó, số nhận dạng 60 ký tự của bạn mô tả "cách" chứ không phải "cái gì" - của một phương thức công khai. Đó là một mùi khác. Thông điệp chính là: suy nghĩ đầu tiên về mã, không phải bình luận.
azheglov

2
@JYelton Vấn đề với tên phương thức của bạn không phải là mô tả mà là mô tả ít nhất 2 thao tác riêng biệt và do đó nên được tái cấu trúc thành ít nhất 2 phương thức độc lập.
Neal

4

Lớp học, phương pháp và cách đặt tên thuộc tính của bạn phải rõ ràng, vì vậy nếu bạn cần những thứ này, nó có thể là một mùi.

Tuy nhiên, tôi khuyên bạn nên sử dụng chúng trên bất kỳ lớp, phương thức và thuộc tính công khai nào trong API, thư viện, v.v ... Ít nhất, họ sẽ tạo tài liệu để giúp bất kỳ nhà phát triển nào sử dụng nó và sẽ ngăn bạn khỏi để viết chúng.

Nhưng dù sao bạn cũng cắt nó, duy trì chúng hoặc xóa chúng.


11
Đặt tên là một chuyện, nhưng các ràng buộc liệt kê về các tham số hoặc các ngoại lệ có khả năng bị ném vẫn còn có giá trị.
Adam Lear

Vâng, tôi sẽ thừa nhận bạn có một điểm, nhưng hầu hết thời gian các ràng buộc tham số là rõ ràng phải không?
John MacIntyre

Không chắc chắn tôi đồng ý với John. Với logic này, không có phương thức khung .net nào nhận được bất kỳ trợ giúp Intellisense nào.
Vaibhav

1
@vaibhav - Tôi đã nói "Tôi sẽ khuyên bạn nên sử dụng chúng trên bất kỳ lớp, phương thức và thuộc tính công khai nào trong API, thư viện, v.v ..." ... điều đó có bao gồm những gì bạn đang nói không?
John MacIntyre

1
@ John - Thật lạ, tôi có thể đã thề rằng tôi đã đọc một cái gì đó khác hoàn toàn khi tôi viết bình luận đó. Bởi vì đoạn thứ hai của bạn là chính xác những gì tôi đã nói ở nơi khác trong chủ đề này. Vì vậy, tôi phải có những tảng đá trong đầu để viết bình luận đó. Vâng, tôi đồng ý với điều đó.
Vaibhav

2

Nếu bạn thấy rằng bạn phải tiếp tục quay lại và chỉnh sửa nhận xét của mình để tương ứng với mã mới, bạn có thể đã làm sai chúng ngay từ đầu. Phần tử tóm tắt phải chứa chính xác điều đó - một bản tóm tắt - những gìlý do tại sao điều bạn đang tóm tắt.

Mô tả làm thế nào một cái gì đó hoạt động trong các ý kiến ​​vi phạm DRY. Nếu mã của bạn không đủ tự mô tả, có lẽ bạn nên quay lại và cấu trúc lại.


1

Vâng, tôi đã tạo ra chúng. [khi xây dựng hệ thống mới từ đầu]

Không, tôi chưa bao giờ được hưởng lợi từ họ. [khi làm việc trên các hệ thống hiện có cần bảo trì]

Tôi đã thấy rằng các nhận xét "Tóm tắt" cuối cùng có xu hướng không đồng bộ với mã. Và một khi tôi nhận thấy một vài bình luận có hành vi xấu, tôi có xu hướng mất niềm tin vào tất cả các bình luận về dự án đó - bạn không bao giờ chắc chắn nên tin vào ý kiến ​​nào.


Nhận xét cũ có thể được coi là một mùi mã mặc dù, thậm chí nhiều hơn ở cấp độ tóm tắt. Nếu các nhà phát triển khác đang thay đổi chức năng và không cập nhật tóm tắt về những gì họ đang làm thì người ta có thể lập luận rằng họ không ghi chép lại công việc của họ một cách chính xác.
rjzii

1

Quên làm một cái gì đó không làm cho nó một ý tưởng tồi. Quên để cập nhật bất kỳ tài liệu là. Tôi đã tìm thấy những thứ này rất hữu ích trong lập trình của tôi và những người kế thừa mã của tôi rất biết ơn khi có chúng.

Đây là một trong những cách dễ thấy nhất để ghi lại mã của bạn.

Thật là khó khăn khi phải tìm mã nguồn để đọc tài liệu nội tuyến hoặc tìm kiếm một tài liệu đi qua những gì mã làm. Nếu bạn có thể có một cái gì đó hữu ích bật lên thông qua trí thông minh thì mọi người sẽ yêu bạn.


1

" Nó phải được sử dụng rất nhiều, như tôi;) "

Tôi đã từng chơi với các bình luận (///). Đối với một lớp học, bạn chỉ cần bình luận như thế này

namespace test
{
    /// <summary>
    /// Summary description for Calendar.
    /// </summary>
    public partial class DatePicker : System.Web.UI.Page
    {

Nhưng, đối với một phương thức, bạn có thể bổ sung thêm bằng cách đưa ra mô tả cho các tham số và kiểu trả về.

/// <summary>
/// Assign selected cases to the participating users based on the filters and configurations
/// </summary>
/// <param name="noOfParticipants">No. of participants to the Table</param>
/// <param name="value">Value of the participant</param>
/// <returns>No Of Cases Assigned on successfull completion</returns>
public long AssignCasesToParticipatingUsers(int noOfParticipants,string value)
{

Bạn có thể sử dụng một lối tắt để tạo bình luận này (///+Tab).


0

sử dụng chúng ngoại trừ thư viện

Đó là thời gian chúng hữu ích. Với việc tạo Tài liệu XML được bật và tham chiếu đến tổ hợp, không có dự án của nó, sẽ hiển thị chi tiết hơn trong intellisense.

Nhưng đối với các bên trong của dự án hiện tại, họ chỉ cản trở.


0

Tôi sử dụng chúng, nhưng như một số người khác đã nói không phổ biến. Đối với các phương thức nhỏ, chúng có thể dễ dàng lớn hơn mã mà chúng đang giải thích. Chúng rất hữu ích để tạo tài liệu có thể được trao cho những người mới sử dụng hệ thống để họ có một cái gì đó để tham khảo trong khi tìm hiểu nó. Mặc dù, là các lập trình viên, chúng ta thường có thể tìm ra một số mã cho nó là tốt để có các ý kiến ​​để hướng dẫn chúng ta và hành động như một cái nạng. Nếu nó phải được viết xuống một nơi nào đó trong mã là nơi nó có nhiều khả năng để luôn cập nhật (nhiều khả năng hơn một số tài liệu Word nổi xung quanh).


0

Tôi sử dụng tương đương trong VB (vì họ sẽ không cho tôi sử dụng C # - rõ ràng là quá khó ... không có nhận xét nào.) Tôi thấy chúng rất tiện lợi. Hầu hết thời gian tôi đợi cho đến khi thủ tục hoặc chức năng được hoàn thành khá nhiều trước khi đưa chúng vào, nếu chỉ để tránh phải thay đổi các nhận xét - hoặc khiến chúng "không đồng bộ".

Tôi không nhất thiết phải viết một cuốn tiểu thuyết - chỉ là những điều cơ bản, mô tả tham số và một số nhận xét (thường là khi có một cái gì đó "khác thường" đang diễn ra ở đó - cách giải quyết hoặc những thứ nhảm nhí khác mà tôi không có trong đó nhưng có không có lựa chọn "cho bây giờ".) (Vâng, tôi biết, rằng "cho bây giờ" có thể kéo dài nhiều năm.)

Tôi bị kích thích nghiêm trọng bởi mã không bị lỗi. Một chuyên gia tư vấn đã viết phiên bản ban đầu của một trong các thành phần của chúng tôi và không bình luận bất cứ điều gì và sự lựa chọn tên của anh ấy được mong muốn ở đây và ở đó. Anh ấy đã đi được hơn một năm và chúng tôi vẫn đang phân loại đồ đạc của anh ấy (ngoài việc làm việc với những thứ của chúng tôi.)

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.