Rõ ràng, giải pháp tốt nhất là không lồng ý kiến của bạn. Bình luận lồng nhau thường là một dấu hiệu cho thấy bạn đang sử dụng bình luận sai. Ví dụ phổ biến nhất là mã nhận xét có chứa chính nhận xét và cách khắc phục là xóa mã thay vì nhận xét.
Điều đó nói rằng, nhiều ngôn ngữ lập trình có nhiều hơn một loại cú pháp nhận xét và bạn có thể sử dụng thực tế này để lồng sâu ít nhất một cấp độ. Ví dụ: trong Java:
/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/
Ngoài ra, trong nhiều ngôn ngữ, ít nhất một loại bình luận là loại có thể lồng nhau; trong các ngôn ngữ giống như C, các bình luận dòng bên trong các bình luận dòng bị bỏ qua:
// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);
Hầu hết các IDE đều hỗ trợ bình luận toàn bộ các khối mã với các bình luận dòng trong một hành động và chúng xử lý kiểu nhận xét này một cách chính xác. Ví dụ tương tự trong Python:
# some_commented_out(code)
# # This is a comment inside the comment!
# # Still inside the nested comment.
# some_more_code_in(outer_comment)
Thông thường, các tiêu chuẩn mã hóa cho một dự án cụ thể có các quy tắc về việc sử dụng kiểu bình luận nào khi nào; một quy ước chung là sử dụng các nhận xét khối ( /* */
) cho tài liệu phương thức và lớp và nhận xét nội tuyến ( //
) cho các nhận xét bên trong các thân phương thức và như vậy, ví dụ:
/**
* Helper class to store Foo objects inside a bar.
*/
public class Foobar {
/**
* Stores a Foo in this Foobar's bar, unless the bar already contains
* an equivalent Foo.
* Returns the number of Foos added (always 0 or 1).
*/
public int storeFoo(Foo foo) {
// Don't add a foo we already have!
if (this.bar.contains(foo)) {
return 0;
}
// OK, we don't have this foo yet, so we'll add it.
this.bar.append(foo);
return 1;
}
}
Với phong cách như vậy, chắc chắn bạn sẽ không cần phải lồng /* */
ý kiến (nếu bạn phải tạm thời vô hiệu hóa toàn bộ phương thức hoặc lớp, đổi tên chúng hoạt động tốt như vậy, nếu không tốt hơn); và các //
bình luận làm tổ, ít nhất là với một chút trợ giúp từ IDE của bạn.
Cuối cùng, để vô hiệu hóa mã, bạn có các tùy chọn khác trong nhiều ngôn ngữ lập trình; ví dụ, trong C, bạn có thể tận dụng bộ tiền xử lý:
this_is(activated);
#if 0
this_is(!activated);
/* Comments inside this block don't really nest, they are simply removed
along with the rest of the block! */
#endif
Trong các ngôn ngữ động, bạn thường chỉ có thể sử dụng các if
câu lệnh thông thường thay thế:
<?php
if (0) {
// This should never run...
some_stuff_that_should_never_run();
}
Tuy nhiên, không giống như ví dụ CPP, chiến lược này yêu cầu toàn bộ tệp nguồn phải có giá trị về mặt cú pháp, do đó, cho đến nay nó không linh hoạt.
Và cuối cùng, có ít nhất một số ngôn ngữ cho phép bình luận lồng nhau. Trong trường hợp bạn quan tâm, wikipedia có một biểu đồ so sánh đẹp .