2012-01-31 18 views
10

Gần đây, tôi đã cài đặt Checkstyle plugin cho Eclipse và cá nhân nghĩ rằng nó thật tuyệt vời. Nhưng một trong những cảnh báo nó mang lại cho tôi là một chút mơ hồ. Cảnh báo chính xác là "Sử dụng ++ không được phép". Đó là về postfix ++ ở một số hàng nhưTại sao việc sử dụng tăng gia số tiền tố được coi là tốt hơn tăng tăng postfix trong tiêu chuẩn để xây dựng

for(int i = 0; i < SOMETHING; i++) 

Ok, tôi nhận thức được rằng foreach là xây dựng tốt hơn cho lần lặp, nhưng nó không thể được áp dụng ở khắp mọi nơi, đôi khi cũ-trường ++ là lựa chọn duy nhất.

Khi tôi thay đổi hàng để

for(int i = 0; i < SOMETHING; ++i) 

cảnh báo sẽ biến mất. Tôi biết sự khác biệt giữa i++++i và đến thời điểm này của cuộc sống của tôi Tôi coi chúng hoán đổi cho nhau trong tiêu chuẩn xây dựng for. Nhưng Checkstyle xem xét i++ có hại (hoặc dễ bị lỗi).

Câu hỏi: Tại sao tăng dần tiền tố tốt hơn tăng số postfix trong cấu trúc for? Hay ... là Checkstyle sai về điều đó?

+0

Tăng trước có thể hiệu quả hơn, ví dụ: C++ khi bạn có quá tải toán tử trên các kiểu phức tạp do người dùng định nghĩa. Nhưng tôi không thể thấy tại sao nó sẽ tạo ra sự khác biệt đối với các nguyên thủy Java. –

Trả lời

11

Tăng thêm hậu tố chỉ có ý nghĩa khi được sử dụng trong biểu thức mà bạn cần giá trị cũ trước khi sửa đổi. Trong các ngữ cảnh không có giá trị mà giá trị đó bị hủy bỏ (như trong vòng lặp for) của bạn, việc lưu giá trị cũ không có ý nghĩa gì.

Nói cách khác:

// makes sense because you need the old value to subscript the array 
stack[top++] = x; 
// in a void context, the old value is discarded 
top++; 

Trong C++ nói riêng, cả hai nhà khai thác có thể bị quá tải, và thi hành postfix ai có thể không hiệu quả vì các yêu cầu để trả về giá trị cũ - nó thường liên quan đến việc sao chép đối tượng cũ để tuân thủ ngữ nghĩa ban đầu của toán tử postfix.

Với kiểu nguyên thủy, bất kỳ trình biên dịch nào cũng sẽ tạo mã giống nhau cho cả hai trường hợp, nhưng thứ hai tốt hơn từ quan điểm ngữ nghĩa của ngôn ngữ.

12

Đó là quy tắc ngu ngốc, IMHO. Mô tả của nó là here

IllegalToken

Kiểm tra cho thẻ bất hợp pháp.

Lý do: Các tính năng ngôn ngữ nhất định thường dẫn đến khó duy trì mã số hoặc không rõ ràng đối với nhà phát triển mới làm quen. Các tính năng khác có thể là không được khuyến khích trong các khuôn khổ nhất định, chẳng hạn như không có phương thức gốc trong các thành phần EJB.

Theo mặc định, nó cấm giá trị gia tăng postfix, số lượng postfix và công tắc. Bạn có thể vô hiệu hóa một cách an toàn quy tắc, hoặc cấu hình nó một cách khác nhau.

Ý kiến ​​của tôi là quy tắc của bạn là một thành ngữ Java chuẩn, và thay thế i ++ bằng ++ tôi sẽ không có hiệu ứng nào khác khiến người mới tự hỏi tại sao thành ngữ chuẩn không được sử dụng.

Các vấn đề liên quan