Cú pháp vô hiệu hóa mã có khác với nhận xét thông thường không?


8

Vì nhiều lý do trong quá trình phát triển, đôi khi tôi nhận xét ra mã. Khi tôi hỗn loạn và đôi khi vội vàng, một số trong số này làm cho nó kiểm soát nguồn.

Tôi cũng sử dụng ý kiến ​​để làm rõ các khối mã.

Ví dụ:

MyClass MyFunction()
{
    (...)
    // return null; // TODO: dummy for now
    return obj;
}

Mặc dù nó "hoạt động" và rất nhiều người làm theo cách này, điều đó làm tôi khó chịu khi bạn không thể tự động phân biệt mã nhận xét với các nhận xét "thực" làm rõ mã:

  • nó thêm tiếng ồn khi cố đọc mã
  • bạn không thể tìm kiếm mã nhận xét, ví dụ như một móc nối cam kết trong kiểm soát nguồn.

Một số ngôn ngữ hỗ trợ nhiều kiểu nhận xét một dòng - ví dụ: trong PHP bạn có thể sử dụng //hoặc #cho một nhận xét một dòng - và các nhà phát triển có thể đồng ý sử dụng một trong các kiểu này cho mã nhận xét:

# return null; // TODO: dummy for now
return obj;

Các ngôn ngữ khác - như C # mà tôi đang sử dụng ngày nay - có một kiểu cho nhận xét một dòng (đúng không? Tôi ước mình sai). Tôi cũng đã thấy các ví dụ về mã "bình luận" bằng cách sử dụng các lệnh của trình biên dịch, rất phù hợp với các khối mã lớn, nhưng hơi quá mức đối với các dòng đơn vì hai dòng mới được yêu cầu cho lệnh này:

#if compile_commented_out
    return null; // TODO: dummy for now
#endif
return obj;

Vì vậy, khi mã nhận xét xảy ra trong mọi ngôn ngữ (?), Không nên "mã bị vô hiệu hóa" có được cú pháp riêng trong thông số ngôn ngữ không? Các pro (phân tách bình luận / mã bị vô hiệu hóa, trình soạn thảo / kiểm soát nguồn hoạt động trên chúng) có đủ tốt không và nhược điểm ("dù sao cũng không nên bình luận", không phải là một phần chức năng của ngôn ngữ, độ trễ IDE tiềm năng (cảm ơn Thomas )) đáng để hy sinh?

Biên tập

Tôi nhận ra ví dụ tôi sử dụng là ngớ ngẩn; mã giả có thể dễ dàng được gỡ bỏ vì nó được thay thế bằng mã thực tế.


Tôi không thấy có gì quá sai với điều này - bình luận và bỏ qua các khối mã nhỏ đôi khi là một chiến thuật hữu ích để gỡ lỗi các lỗi rất cụ thể trong các cơ sở mã kế thừa lớn. Tôi thấy điều này giúp tôi thu hẹp các vấn đề (tất nhiên ngoài việc sử dụng một trình gỡ lỗi thích hợp). Tôi sẽ không quan tâm nhìn thấy một loại đặc biệt của bình luận, có lẽ /# ... #/đó sẽ làm nổi bật khác trong IDE (đối với tín hiệu thị giác) và có thể tạo ra một trình biên dịch cảnh báo rằng sau đó sẽ bị mắc kẹt và báo cáo bằng việc xây dựng hàng đêm nếu ai đó không kiểm tra những thay đổi đó trở lại vào kiểm soát nguồn.
Thất vọngWithFormsDesigner

Câu trả lời:


18

Trước hết, trong ví dụ của bạn có các bình luận "TODO". Các loại bình luận này đặc biệt theo cách vì chúng được các IDE (ít nhất là Eclipse và Visual Studio) phát hiện như một điểm đánh dấu cho "các tác vụ". Nhưng tôi chắc chắn rằng bạn biết rằng vì bạn sử dụng chúng và tôi cho rằng bạn không đề cập đến chúng khi bạn sử dụng thuật ngữ "mã bị vô hiệu hóa".

Đối với bản thân mã bị vô hiệu hóa, ý kiến ​​của tôi là nó làm ô nhiễm mã. Tôi sử dụng một cơ chế khác để theo dõi những gì đã có trước đó: kho lưu trữ nguồn . Ngoại trừ khi tôi ở chế độ mã / kiểm tra / mã / kiểm tra ..., tôi không nhận xét mã không sử dụng, tôi xóa nó. Và khi đó là trường hợp bình luận dòng X chỉ là vấn đề của một phím tắt.

Chỉnh sửa: vì vậy, tôi đã quên trả lời câu hỏi rõ ràng của bạn, tôi nghĩ rằng nó không hữu ích để có nhận xét đặc biệt cho mã bị vô hiệu hóa. Nếu bạn thực sự muốn giữ mã, nhưng nói "không sử dụng nó", bạn luôn có thể đánh dấu nó là @deprecated nhưng đó không phải là điểm của câu hỏi của bạn.


Tôi đã từng viết mã bẩn và tự hào về việc sử dụng "hack" và sửa lỗi nhanh, ngày nay tôi đánh giá cao cấu trúc - có lẽ tôi cũng có thể quen với điều này.
deltreme

2
TLDR; Sử dụng kiểm soát nguồn.
Chris

1
@deltternal Tôi thừa nhận rằng tôi đã làm điều tương tự (cho thấy cách tôi "cải thiện" mã!) trước khi tôi nghiêm túc bắt đầu sử dụng kho lưu trữ nguồn trong môi trường chuyên nghiệp. Kể từ đó, tôi đánh giá cao việc phải đọc ít dòng mã nhất mà tôi phải có mỗi ngày.
Jalayn

Sử dụng kiểm soát nguồn kiểm tra các khác biệt trước khi cam kết.
ChúZeiv

1
Thật không may, trọng tâm của các câu trả lời là về cách không cam kết mã bị vô hiệu hóa, chứ không phải là thuật ngữ "bình luận" thực sự ngớ ngẩn như thế nào. Tôi mong đợi nhiều hơn một hỗn hợp. Chấp nhận câu trả lời này khi tôi hỏi ý kiến ​​và bạn có cộng đồng ủng hộ bạn: P
deltreme

5

Vì nhiều lý do trong quá trình phát triển, đôi khi tôi nhận xét ra mã. Khi tôi hỗn loạn và đôi khi vội vàng, một số trong số này làm cho nó kiểm soát nguồn.

Tôi nghĩ rằng đây là gốc rễ của vấn đề. Trở nên hỗn loạn và vội vã chỉ để giới thiệu vấn đề. Tìm hiểu lý do tại sao sự phát triển của bạn đang được gấp rút và không được kiểm soát tốt nên là bước đầu tiên, không cố gắng tìm mã nhận xét.

Vì vậy, khi mã nhận xét xảy ra trong mọi ngôn ngữ (?), Không nên "mã bị vô hiệu hóa" có được cú pháp riêng trong thông số ngôn ngữ không? Các pro (tách bình luận / mã bị vô hiệu hóa, biên tập viên / kiểm soát nguồn hoạt động trên chúng) có đủ tốt không và nhược điểm ("dù sao cũng không nên bình luận", không phải là một phần chức năng của ngôn ngữ) có đáng để hy sinh không?

Tôi không nghĩ vậy. Mã nhận xét là một thực tiễn xấu và tôi không nghĩ rằng ngôn ngữ nên khuyến khích bất cứ ai sử dụng nó. Vâng, mọi người làm điều đó và tôi đã nhìn thấy nó, nhưng tôi từ chối kiểm tra mã của tôi được nhận xét. Cung cấp cho mọi người khả năng dễ dàng quản lý mã không sử dụng, mã cũ nằm ngoài phạm vi của ngôn ngữ và là thứ thuộc về lĩnh vực kiểm soát phiên bản.

Tôi cũng lo ngại về những hạn chế kỹ thuật. Để làm việc này, bạn cần phân tích các nhận xét và xác định xem chúng có được nhận xét ngoài nguồn hoặc văn bản không hoặc thêm mã thông báo mới vào ngôn ngữ. Tùy thuộc vào độ phức tạp hiện tại của ngôn ngữ, tôi không hoàn toàn chắc chắn điều này sẽ ảnh hưởng gì đến việc biên dịch (xác định xem một dòng có phải là mã hợp lệ không được biên dịch). Ngoài ra, mọi người sau đó mong đợi các IDE sẽ quản lý điều này trong thời gian thực (có mối quan hệ giữa độ phức tạp của cú pháp ngôn ngữ và khả năng đáp ứng của IDE để tìm và làm nổi bật các cấu trúc và lỗi khác nhau).


Tôi đang cố gắng quản lý sự hỗn loạn và vội vàng của mình, và tôi đồng ý hoàn toàn đó là nơi tất cả bắt đầu. Tuy nhiên, điều này hiện đang xảy ra và tôi chắc chắn rằng ngay khi tôi không nhận được mã nhận xét, sẽ có người khác thay thế tôi. Có lẽ tôi chỉ cằn nhằn. Cuối cùng, đó không phải là vấn đề lớn. Về khía cạnh kỹ thuật: IDE thậm chí có thể coi chúng là nhận xét thông thường, sử dụng màu hoặc ẩn chúng - nhiều IDE đã hỗ trợ điều này cho các yếu tố cú pháp khác.
deltreme

@deltternal Tôi không quan tâm làm thế nào IDE sẽ hỗ trợ chúng trên bề mặt. Làm thế nào các IDE sẽ tìm và xử lý chúng theo cách chính xác mà vẫn duy trì khả năng đáp ứng? Thêm mã thông báo vào ngôn ngữ hoặc thêm xử lý văn bản có khả năng làm chậm phân tích cú pháp hoặc mang lại kết quả không chính xác.
Thomas Owens

Tôi không nghĩ rằng cuộc thảo luận sẽ diễn ra theo cách này :) Và tôi không nghĩ việc thêm một mã thông báo khác (hiện tại có bao nhiêu IDE hiện đại nhận ra?) Sẽ dẫn đến một trình soạn thảo phản hồi kém. Nếu bạn thấy nó là một mối đe dọa tiềm tàng ngay cả trong giai đoạn nghiên cứu của "dự án" này, bạn có ước tính được% hiệu suất sẽ là bao nhiêu không? Giả sử chúng tôi thêm mã thông báo và muốn màu cho nó trong IDE.
deltreme

@deltternal Tôi không nghĩ rằng nó sẽ thêm nhiều thời gian cho hầu hết các dự án, nhưng về thời gian thêm / giá trị gia tăng, tỷ lệ này rất kém. Nếu bạn phải thêm vài micrô giây đó vào hàng chục nghìn tệp nguồn, bạn chỉ cần thêm mili giây vào mọi thứ phân tích tệp nguồn, mỗi khi bạn phân tích tệp nguồn. Đối với một IDE, đó thường sẽ là mỗi khi bạn lưu. Nó cũng sẽ là bản dựng sau cam kết và / hoặc bản dựng hàng ngày của bạn. Hợp chất những mili giây đó và nó sẽ nhanh chóng trở nên có thể đo được trong vài phút trong suốt vòng đời của dự án để xử lý một tính năng không có giá trị.
Thomas Owens

1
@deltternal Hoàn toàn không. Nếu bạn đã vô hiệu hóa mã trong dự án của mình, điều đó khiến nó trở thành kiểm soát nguồn, bạn đã làm sai. Thỉnh thoảng, nếu tôi viết lại một phương thức, tôi có thể nhận xét phương thức cũ và thực hiện lại nó, nhưng một khi tôi chắc chắn mã mới vượt qua các thử nghiệm và hoạt động như dự định, tôi sẽ xóa mã bị vô hiệu hóa và kiểm tra nó. thực sự kiểm tra mã bị vô hiệu hóa hoặc dựa vào nó theo một cách nào đó, đó là dấu hiệu của các vấn đề lớn hơn trong dự án cần được giải quyết.
Thomas Owens

4

Ngay cả khi chỉ có một cú pháp nhận xét bằng ngôn ngữ bạn đang sử dụng, bạn vẫn có thể thêm hương vị của riêng mình vào ngôn ngữ đó, tôi đã làm việc trên các dự án trong đó // biểu thị một dòng bị vô hiệu hóa và // - chỉ ra một nhận xét. Nó không đẹp như được tích hợp sẵn, nhưng hầu hết các IDE không biết bạn đã sử dụng các cú pháp khác nhau cho các mục đích khác nhau, vì vậy đôi khi cách đánh mắt cũ để thấy sự khác biệt hoạt động tốt nhất.


Nếu nhóm dành cho hương vị này, nó chắc chắn sẽ là một cách giải quyết tốt. Nó thậm chí có thể "on-commit-hook", và nếu bạn quên các ký tự phụ cho một cái gì đó có nghĩa là nhận xét, nó cũng sẽ cảnh báo.
deltreme

1

Đối lập với câu trả lời, tôi sẽ trả lời bằng "CÓ, nên có cú pháp khác nhau!"

Tôi sẽ thách thức bất kỳ nhà phát triển nào nói rằng họ trải qua ngay cả một ngày mã hóa mà không bình luận ra mã. Làm như vậy không có nghĩa là người ta không biết kiểm soát nguồn hoặc lười biếng. Ngay cả khi Thomas Owens nói trong câu trả lời không đồng tình của mình, " Ngoại trừ khi tôi ở chế độ mã / kiểm tra / mã / kiểm tra ..., tôi không nhận xét mã không sử dụng. "

Bao nhiêu thời gian của bạn dành cho chế độ mã / kiểm tra / mã / kiểm tra? Đối với tôi đó là ít nhất 90% công việc! Hiện tại tôi đang chuyển đổi một dự án OSX lớn sang iOS và bước đầu tiên là vô hiệu hóa tất cả các mã bị phá vỡ cho đến khi tôi còn sơ khai hoạt động. Trong những tuần tiếp theo, tôi sẽ dần dần không chú ý và sửa mã khi tôi làm cho nó hoạt động.

Có nhiều trường hợp khác là tốt. Còn khi bạn đang sử dụng mã ví dụ nơi bạn thường tìm thấy các hướng như "Bỏ ghi chú sau cho Windows" hoặc "Bỏ ghi chú dòng này cho Ứng dụng chỉ dành cho iPhone" thì sao?

Có, tôi sẽ sử dụng kiểm soát nguồn tất cả cùng. Nhưng cũng CÓ, tôi rất thích có một cách để phân biệt mã bị vô hiệu hóa với các nhận xét thực tế.

Tóm lại: Bất kỳ lập trình viên nào nói rằng họ không sử dụng các bình luận để vô hiệu hóa mã đang nói dối. Có nhiều thứ để mã hóa hơn các tệp được đánh bóng mà bạn cam kết với CHÍNH. Có nhiều lý do hợp lệ cho mã bị vô hiệu hóa.

Vâng, thật tuyệt nếu có một cú pháp (hoặc ít nhất là một quy ước) để phân biệt các bình luận thực sự với mã bị vô hiệu hóa.

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.