Đây là một câu hỏi tôi muốn tự hỏi mình khi suy nghĩ về việc có nên thêm nhận xét vào một phần của mã không: Tôi có thể truyền đạt điều gì để giúp người tiếp theo hiểu rõ hơn về mục đích chung của mã, để họ có thể cập nhật, sửa chữa hoặc mở rộng nó nhanh hơn và đáng tin cậy hơn?
Đôi khi, câu trả lời chính xác cho câu hỏi này là không có gì nhiều bạn có thể thêm vào thời điểm đó trong mã, bởi vì bạn đã chọn tên và quy ước làm cho ý định trở nên rõ ràng nhất có thể. Điều đó có nghĩa là bạn đã viết mã tự viết tài liệu vững chắc và việc chèn một nhận xét ở đó có thể sẽ làm mất giá trị nhiều hơn nó sẽ giúp ích. (Lưu ý rằng các nhận xét dư thừa thực sự có thể làm hỏng độ tin cậy của mã theo thời gian bằng cách làm chậm sự không đồng bộ với mã thực theo thời gian và do đó làm cho việc giải mã ý định thực sự khó khăn hơn.
Tuy nhiên, trong hầu hết mọi chương trình và trong bất kỳ ngôn ngữ lập trình nào, bạn sẽ gặp phải những điểm mà các khái niệm và quyết định quan trọng nhất định được lập trình viên ban đầu - bởi bạn - sẽ không còn rõ ràng trong mã. Điều này là không thể tránh khỏi bởi vì một lập trình viên giỏi luôn lập trình cho tương lai - nghĩa là, không chỉ để chương trình hoạt động một lần, mà còn tạo ra tất cả nhiều bản sửa lỗi và phiên bản và mở rộng và sửa đổi trong tương lai và ai biết phải làm gì cũng hoạt động chính xác. Rằng mục tiêu sau đó khó hơn rất nhiều, và đòi hỏi nhiều suy nghĩ hơn để làm tốt. Nó cũng rất khó để thể hiện tốt trong hầu hết ngôn ngữ máy tính, đó là tập trung hơn vào chức năng - có nghĩa là, trên nói những gì hiện này phiên bản của chương trình cần phải làm, ngay bây giờ, để làm cho nó thỏa đáng.
Đây là một ví dụ đơn giản về những gì tôi muốn nói. Trong hầu hết các ngôn ngữ, một tìm kiếm nội tuyến nhanh chóng về cấu trúc dữ liệu nhỏ sẽ có đủ độ phức tạp để ai đó lần đầu tiên nhìn vào nó có thể sẽ không nhận ra ngay đó là gì. Đó là cơ hội cho một nhận xét tốt, bởi vì bạn có thể thêm một cái gì đó về ý định mã của bạn mà người đọc sau này có thể sẽ đánh giá cao ngay lập tức vì hữu ích cho việc giải mã các chi tiết.
Ngược lại, trong các ngôn ngữ như ngôn ngữ dựa trên logic Prolog, việc thể hiện tìm kiếm một danh sách nhỏ có thể rất tầm thường và cô đọng đến nỗi mọi bình luận bạn có thể thêm sẽ chỉ là tiếng ồn. Vì vậy, bình luận tốt nhất thiết phải phụ thuộc vào bối cảnh. Điều đó bao gồm các yếu tố như thế mạnh của ngôn ngữ bạn đang sử dụng và bối cảnh chương trình tổng thể.
Điểm mấu chốt là đây: Nghĩ đến tương lai. Tự hỏi bản thân điều gì là quan trọng và rõ ràng đối với bạn về cách chương trình nên được hiểu và sửa đổi trong tương lai. [1]
Đối với những phần trong mã của bạn thực sự là tài liệu tự động, các bình luận chỉ cần thêm nhiễu và tăng vấn đề kết hợp cho các phiên bản trong tương lai. Vì vậy, đừng thêm chúng ở đó.
Nhưng đối với những phần trong mã của bạn, nơi bạn đã đưa ra quyết định quan trọng từ một số tùy chọn hoặc khi bản thân mã đủ phức tạp, mục đích của nó không rõ ràng, xin vui lòng, hãy thêm kiến thức đặc biệt của bạn dưới dạng nhận xét. Một nhận xét tốt trong trường hợp như vậy là một nhận xét cho phép một số lập trình viên tương lai biết điều gì phải được giữ nguyên - đó là khái niệm về một khẳng định bất biến, tình cờ - và điều gì là ổn để thay đổi.
[1] Điều này vượt xa vấn đề bình luận, nhưng đáng để đưa ra: Nếu bạn thấy rằng bạn có một ý tưởng rất rõ ràng về cách mã của bạn có thể thay đổi trong tương lai, bạn có thể nên nghĩ xa hơn là chỉ nhận xét và nhúng các tham số đó trong chính mã, vì điều đó hầu như sẽ luôn là một cách đáng tin cậy hơn để đảm bảo độ tin cậy của các phiên bản mã trong tương lai của bạn hơn là cố gắng sử dụng các nhận xét để điều khiển một người không biết tương lai đi đúng hướng. Đồng thời bạn cũng muốn tránh tăng trưởng quá mức, vì con người nổi tiếng là không tốt trong việc dự đoán tương lai, và điều đó bao gồm cả tương lai của những thay đổi chương trình. Vì vậy, hãy cố gắng xác định và nắm bắt các khía cạnh hợp lý và đã được chứng minh của tương lai ở tất cả các cấp thiết kế chương trình, nhưng đừng