Vì tò mò, tôi bắt đầu tự hỏi liệu một ngôn ngữ không cho phép bình luận sẽ mang lại mã dễ đọc hơn vì bạn sẽ bị buộc phải viết mã tự nhận xét.
Sau đó, một lần nữa, bạn có thể viết mã xấu như trước vì bạn không quan tâm. Nhưng ý kiến của bạn là gì?
Vì tò mò, tôi bắt đầu tự hỏi liệu một ngôn ngữ không cho phép bình luận sẽ mang lại mã dễ đọc hơn vì bạn sẽ bị buộc phải viết mã tự nhận xét.
Sau đó, một lần nữa, bạn có thể viết mã xấu như trước vì bạn không quan tâm. Nhưng ý kiến của bạn là gì?
Câu trả lời:
Tôi nghĩ rằng các lập trình viên sẽ tìm ra một cách khác để thêm ý kiến ...
string aComment = "This is a kludge.";
"this is a comment";
Tôi không nghĩ nó đơn giản:
ngay cả trong mã được viết tốt, tự viết tài liệu, có những tình huống hợp pháp mà bạn nên viết bình luận.
Giả sử bạn là một lập trình viên hoàn hảo (mà bạn thì không, nhưng hãy giả sử) ...
Có rất nhiều hiệu ứng không rõ ràng có thể xảy ra trong mã khi bạn can thiệp vào nội dung bạn không viết. Ví dụ: có thể có lỗi thiết kế thư viện của người khác hoặc (nếu bạn là nhà phát triển nhân) trong phần cứng của người khác. Có ý kiến để giải thích lý do tại sao bạn sử dụng loại bùn cụ thể ở một nơi cụ thể có thể là điều cần thiết để hiểu mã và đảm bảo rằng loại bỏ bùn không bị loại bỏ (phá vỡ mọi thứ).
Thật khó cho tôi để bao bọc tâm trí của tôi xung quanh ý tưởng rằng việc loại bỏ các tùy chọn khỏi một ngôn ngữ bằng cách nào đó sẽ làm cho các chương trình được viết bằng ngôn ngữ nói tốt hơn. Nhận xét là không bắt buộc, và viết mã tài liệu tự cũng không phải là tốt.
Không có thay thế cho thực hành phát triển tốt.
Về lý thuyết, ban đầu , COBOL được thiết kế theo cách nó có nghĩa là tự ghi chép đủ để ngay cả những người không phải là nhà phát triển (tức là người giám sát) có thể xem lại mã được viết và xác định điều gì đang xảy ra. Tuy nhiên, trong thực tế, khi một chương trình phát triển phức tạp hơn, thật khó để hiểu mọi thứ đang diễn ra chỉ thông qua mã.
Trong khi loại bỏ ý kiến có thể buộc một số nhà phát triển để viết mã đó là tốt hơn ở bản thân tài liệu, vẫn còn phát triển ra khỏi đó mà viết giấy tờ kém mã (tức là tên biến của a
, b
, c
, vv) và nó là những thói quen mà mọi người cần phải được đào tạo ra của Trong những trường hợp đó, việc xóa các bình luận sẽ không ảnh hưởng đến các nhà phát triển đó và có thể cản trở nỗ lực của các nhà phát triển khác để giải thích các đoạn mã phức tạp.
argument = 3.0; aa = sqrt( argument ); bb = f( aa );
Thở dài.
Mỗi chương trình được viết để thực hiện các yêu cầu chức năng nằm ngoài chương trình, cho dù được viết ra hoặc chỉ trong đầu của ai đó.
Tôi nghĩ rằng chức năng thiết yếu nhất của các bình luận là thiết lập ánh xạ giữa các yêu cầu và mã. Lý do ánh xạ là cần thiết để cho phép thay đổi gia tăng. Khi một sự thay đổi đối với các yêu cầu xảy ra, cần phải thực hiện các thay đổi tương ứng với mã, nếu mã đó vẫn là một giải pháp cho các yêu cầu. Các ý kiến phục vụ như một lộ trình cho những thay đổi.
Nếu ngôn ngữ là ngôn ngữ lý tưởng dành riêng cho miền (DSL) lý tưởng phù hợp hoàn hảo với vấn đề đang được giải quyết, thì ánh xạ phải là một đẳng cấu đơn giản và không cần thiết phải bình luận. Mã nguồn chỉ đơn giản là nêu vấn đề, và không có gì khác cần phải nói. Giải pháp của vấn đề sẽ bị chôn vùi trong việc thực hiện ngôn ngữ.
Vì các ngôn ngữ chúng tôi làm việc không phải là DSL như vậy và sẽ duy trì như vậy trong một thời gian, chúng tôi vẫn cần nhận xét . Đó là vấn đề bằng cấp. Đôi khi vấn đề là một kết hợp tốt với ngôn ngữ trong tay, nhưng thường thì không.
Tôi làm việc ở đâu đó không cho phép nhận xét nội tuyến (nghĩa là bạn chỉ có thể có nhận xét ở đầu chức năng). Không, nó không làm cho mã dễ đọc hơn. Nó làm cho nó trật tự cường độ tồi tệ hơn.
Tôi tránh tất cả các nhận xét trong mã (nội tuyến hoặc luồng) có lợi cho docblock + varables có ý nghĩa + lập trình spartan và nó hoạt động.
Và vâng, tôi biết docblocks là các bình luận về mặt kỹ thuật, tuy nhiên, chúng thực sự bổ sung cho mã, không xâm phạm và "chuẩn hóa" ... tất cả mọi thứ mà một bình luận chung không có.
Những gì tôi nghĩ có thể làm việc thay thế cho các bình luận: một ngôn ngữ / cú pháp / thành ngữ docblock được tiêu chuẩn hóa, một cái gì đó giống như các chú thích trong java.
doxygen
hoạt động cho việc này? vi.wikipedia.org/wiki/Doxygen
Nó không chỉ không ảnh hưởng đến chất lượng - như những người khác đã quan sát, nó thực sự sẽ gây phiền nhiễu.
Tôi chắc chắn rằng hầu hết chúng ta thỉnh thoảng đã làm một cái gì đó như thế này:
foreach ( myObject obj in SomeList )
{
Debug.Writeline( obj.Name );
// for some reason this isn't working
// obj.SetArielPotency( setting );
// obj.DoSomeProcess();
}
Sẽ khó chịu đến mức nào nếu bạn không thể bình luận một vài dòng mã để tìm ra lỗi đó đến từ đâu?
Bất kể ý kiến về cách mã hoạt động, những điều thực tế đơn giản như thế hoặc bỏ vào một TODO
ghi chú thuận tiện là những điều giúp dễ dàng khắc phục các vấn đề nhỏ hơn và nhớ những gì chúng tôi đã làm khi bắt đầu viết mã.
Bình luận giống như một cuốn sách tóm tắt. Chắc chắn, bạn có thể hiểu mọi thứ bằng cách đọc mã, nhưng tại sao bạn muốn đọc cả một trang khi nó có thể được tóm tắt trong một dòng nhận xét?
Mặc dù tôi đồng ý với các câu trả lời khác mà ngay cả mã tự viết tài liệu cũng cần bình luận, nhưng điều đó chỉ phù hợp với các ngôn ngữ hiện tại .
Tôi nghĩ câu hỏi thực sự là "Có thể thiết kế một ngôn ngữ lập trình mới mà không cần bình luận không?" Nó sẽ cần phải ở mức khá cao với sự trừu tượng lớn. Mọi câu lệnh và hàm sẽ bị buộc phải đọc được thông qua cú pháp của ngôn ngữ.
Lập trình viên vô kỷ luật sẽ viết mã xấu, bất kể ngôn ngữ.
Hấp dẫn rằng con trăn, vốn chỉ có quyền riêng tư theo quy ước (tiền tố _), không thực hiện bất kỳ nỗ lực nào để cảnh sát điều này, và nhiều mã tốt vẫn đang được viết.
Rant: Đôi khi tôi nghĩ rằng các langug dễ dãi hơn sẽ buộc nhiều người phải học cách viết mã đúng hơn là ngược lại (tức là chỉ có một chiều của Java và bạn sẽ bị nguyền rủa nếu bạn muốn nghĩ về các hàm như các đối tượng hạng nhất).
Tôi sẽ đoán: có lẽ là không. Tại sao? Bởi vì bạn phải mã hóa "tại sao" như một chủ nghĩa hình thức trong ngôn ngữ và bởi vì "tại sao", dù được mã hóa bằng ngôn ngữ hay nhận xét bằng ngôn ngữ đều bị các lập trình viên sử dụng.
Mã chắc chắn có thể tự nhận xét trong việc giải thích những gì nó đang làm, nhưng không phải lúc nào mã cũng có thể giải thích tại sao nó lại làm như vậy. Đó là nơi bình luận là cần thiết nhất.
Nếu, ví dụ, một phần của mã là cần thiết để tuân thủ một quy định cụ thể, làm thế nào để bạn giải thích điều đó mà không có nhận xét? Nếu thuật toán được sử dụng bởi một đoạn mã cụ thể được mô tả trong một bài báo được viết vào năm 1998 bởi M. Matsumoto và T. Nishimura, làm thế nào để bạn giải thích điều đó mà không có nhận xét? Nếu một thuật toán không cung cấp chính xác chức năng tối ưu nhưng tạo ra sự thỏa hiệp rất cụ thể có thể gây ra các vấn đề trong tương lai nếu mã khác bị thay đổi, làm thế nào để bạn giải thích điều đó mà không có nhận xét?
Điều gì xảy ra nếu một phần mã được kiểm toán bởi một kiểm toán viên độc lập để nó không thể được sửa đổi mà không làm mất hiệu lực kiểm toán đó và mã được sử dụng để xây dựng một sản phẩm có sự tuân thủ với kiểm toán đó được yêu cầu bởi khách hàng của bạn. Làm thế nào để bạn chỉ ra rằng không có bình luận?
Tôi đã luôn nghĩ rằng thật tuyệt khi có một bình luận một từ để nếu bạn đặt trước một từ có ký hiệu (giả sử là dấu hai chấm), từ đó sẽ bị bỏ qua. Bằng cách đó, bạn có thể nói một điều khó hiểu là nó chỉ cho phép nhận xét một từ trong một biểu thức s. Chẳng hạn, bạn có thể biến điều này:
(if (= x y)
x
y)
... vào đây:
(if (= x y)
:then x
:else y)
Nếu bạn hoàn toàn phải làm, bạn có thể xâu chuỗi nhiều bình luận một từ để tạo thành một bình luận nội tuyến:
(if x :Remember, :x :could :be :nil!
...)
Tất nhiên, đây là một nỗi đau để loại. Trong thực tế, đó là điểm. Nó khuyến khích bạn sử dụng các bình luận nội tuyến một cách tiết kiệm và giữ cho chúng ngắn gọn và đi vào điểm chính. Nhưng tôi có cảm giác rằng tôi có một thời gian khó thuyết phục bất cứ ai sử dụng ngôn ngữ.
Đây là hai hoặc không có gì. Một số lập trình viên không làm gì để mã có thể đọc được. Không cho phép bình luận sẽ củng cố điều này. Một số lập trình viên viết bình luận tốt, ngay cả khi họ thậm chí còn tốt hơn nếu họ tái cấu trúc mã thay vì nhận xét - xóa bình luận có thể buộc họ thực hiện tái cấu trúc tốt hơn.
Lý do tại sao đây là một ý tưởng tốt: - Không
Lý do tại sao đây là một ý tưởng tồi: - Có nhiều lập trình viên tàn bạo hơn các lập trình viên giỏi nhưng không tuyệt vời - Hầu như luôn luôn có một số nhận xét cho các vấn đề kỳ lạ, tóm tắt, v.v. - Ngay cả khi bạn tránh nhận xét, bạn có thể sẽ sử dụng nhận xét như một giai đoạn trên đường: gửi bình luận khi bạn đang viết một cái gì đó, và sau đó quay lại và tái cấu trúc nó đi. Nhưng bạn không thể luôn làm điều đó ngay lập tức vì bạn vẫn đang học. - Nó sẽ khuyến khích mọi người làm việc quanh nó - Ai sẽ sử dụng nó? Những người viết mã không thể đọc được và muốn một cái cớ (xấu) và những người đã say mê ý tưởng (những người chỉ có thể "không viết bình luận" để bắt đầu). Nếu đây là những gì bạn muốn, chỉ cần viết một tiêu chuẩn mã hóa cho thấy bạn muốn mọi người làm điều đó như thế nào.
Những lý do mà điều này có thể có liên quan - Trường hợp có thể hữu ích là một phần của hệ thống để làm cho "không bình luận" tốt hơn, ví dụ: một ngôn ngữ hoặc IDE có sự hỗ trợ tốt cho một cái gì đó tốt hơn bình luận và là một phần của bình luận, eschews bình luận. Tôi không biết nó sẽ hoạt động như thế nào, nhưng đó là một điểm tốt đáng để suy nghĩ.