Thực hành tiêu chuẩn là đi với người nguyên thủy, trừ khi bạn đang xử lý thuốc generic (đảm bảo bạn biết về việc tự động mở hộp & bỏ hộp !).
Có một số lý do tốt để tuân theo quy ước:
1. Bạn tránh những lỗi đơn giản:
Có một số trường hợp tinh tế, không trực quan thường bắt gặp người mới bắt đầu. Ngay cả các lập trình viên có kinh nghiệm cũng trượt lên và đôi khi mắc những lỗi này (hy vọng điều này sẽ được theo sau bằng cách chửi thề khi họ gỡ lỗi mã và tìm lỗi!).
Lỗi commmon nhất là sử dụng a == b
thay vì a.equals(b)
. Mọi người thường làm a == b
với các nguyên thủy để dễ dàng thực hiện khi bạn đang sử dụng trình bao bọc Object.
Integer a = new Integer(2);
Integer b = new Integer(2);
if (a == b) { // Should be a.equals(b)
// This never gets executed.
}
Integer c = Integer.valueOf(2);
Integer d = Integer.valueOf(2);
if (c == d) { // Should be a.equals(b), but happens to work with these particular values!
// This will get executed
}
Integer e = 1000;
Integer f = 1000;
if (e == f) { // Should be a.equals(b)
// Whether this gets executed depends on which compiler you use!
}
2. Dễ đọc:
Hãy xem xét hai ví dụ sau đây. Hầu hết mọi người sẽ nói thứ hai là dễ đọc hơn.
Integer a = 2;
Integer b = 2;
if (!a.equals(b)) {
// ...
}
int c = 2;
int d = 2;
if (c != d) {
// ...
}
3. Hiệu suất:
Thực tế là nó là chậm hơn để sử dụng những gói Object cho nguyên thủy hơn là chỉ sử dụng nguyên thủy. Bạn đang thêm chi phí khởi tạo đối tượng, gọi phương thức, v.v. vào những thứ bạn sử dụng ở mọi nơi .
Câu nói "... nói khoảng 97% thời gian của Knuth: tối ưu hóa sớm là gốc rễ của mọi tội lỗi" không thực sự được áp dụng ở đây. Ông đã nói về việc tối ưu hóa làm cho mã (hoặc hệ thống) trở nên phức tạp hơn - nếu bạn đồng ý với điểm # 2, đây là một tối ưu hóa giúp mã ít phức tạp hơn!
4. Đó là quy ước:
Nếu bạn thực hiện các lựa chọn phong cách khác nhau cho 99% các lập trình viên Java khác ngoài kia, có 2 nhược điểm:
- Bạn sẽ thấy mã của người khác khó đọc hơn. 99% các ví dụ / hướng dẫn / vv ngoài kia sẽ sử dụng nguyên thủy. Bất cứ khi nào bạn đọc, bạn sẽ có thêm chi phí nhận thức về suy nghĩ về việc nó sẽ trông như thế nào theo phong cách mà bạn đã từng sử dụng.
- Người khác sẽ thấy mã của bạn khó đọc hơn. Bất cứ khi nào bạn đặt câu hỏi trên Stack Overflow, bạn sẽ phải chọn lọc các câu trả lời / nhận xét hỏi "tại sao bạn không sử dụng nguyên thủy?". Nếu bạn không tin tôi, chỉ cần nhìn vào các trận chiến mà mọi người có đối với những thứ như vị trí khung, thậm chí không ảnh hưởng đến mã được tạo!
Thông thường tôi sẽ liệt kê một số điểm phản đối, nhưng thực lòng tôi không thể nghĩ ra bất kỳ lý do chính đáng nào để không đi theo quy ước ở đây!