Sun (và bây giờ là Oracle) đã duy trì một tài liệu có tiêu đề Quy ước mã cho ngôn ngữ lập trình Java . Bản cập nhật cuối cùng cho bản này là vào năm 99, nhưng bản chất của dòng hướng dẫn phong cách vẫn tồn tại.
Chương 9 bao gồm các quy ước đặt tên.
Đối với loại định danh 'hằng số':
Tên của các biến được khai báo là hằng lớp và của hằng ANSI phải là chữ hoa với các từ được phân tách bằng dấu gạch dưới ("_"). (Nên tránh các hằng ANSI, để dễ gỡ lỗi.)
Các ví dụ đã cho:
static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;
Trong một tài liệu gần đây hơn - nó bị trượt ở đó. Từ các biến (Hướng dẫn Java> Học ngôn ngữ Java> Khái niệm cơ bản về ngôn ngữ :
Nếu tên bạn chọn chỉ bao gồm một từ, hãy đánh vần từ đó trong tất cả các chữ cái viết thường. Nếu nó bao gồm nhiều hơn một từ, viết hoa chữ cái đầu tiên của mỗi từ tiếp theo. Tên gearRatio
và currentGear
là ví dụ điển hình của quy ước này. Nếu biến của bạn lưu trữ một giá trị không đổi, chẳng hạn như static final int NUM_GEARS = 6
, quy ước sẽ thay đổi một chút, viết hoa mỗi chữ cái và tách các từ tiếp theo bằng ký tự gạch dưới. Theo quy ước, ký tự gạch dưới không bao giờ được sử dụng ở nơi khác.
Nhiều máy phân tích tĩnh cho Java tìm cách thực thi điều này. Ví dụ checkstyle thực thi:
Kiểm tra xem các tên hằng tuân theo một định dạng được chỉ định bởi thuộc tính định dạng. Hằng số là trường tĩnh và cuối cùng hoặc trường giao diện / chú thích, ngoại trừ serialVersionUID
và serialPersistentFields
. Các định dạng là một biểu thức thông thường và mặc định ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
.
Điều này thực sự nắm bắt được các quy ước của cộng đồng viết mã ... và lý tưởng là giữ nguyên như vậy.
Các ví dụ ở trên được đưa ra dưới dạng các ví dụ static final
có khả năng xuất phát từ các quy ước C cho #define
- giống như C, được thay thế trong mã trong quá trình biên dịch thay vì trong thời gian chạy.
Câu hỏi mà sau đó nên được đặt ra là "đây có phải là hành vi như một hằng số không? Hay nó hoạt động giống như một trường viết một lần?" - và sau đó tuân theo các quy ước cho phù hợp. Bài kiểm tra litmus cho một câu hỏi như vậy sẽ là "Nếu bạn định tuần tự hóa đối tượng, bạn có bao gồm trường cuối cùng không?" Nếu câu trả lời là nó là một hằng số thì hãy coi nó như vậy (và không tuần tự hóa nó). Mặt khác, nếu nó là một phần của trạng thái của đối tượng cần được tuần tự hóa, thì đó không phải là một hằng số.
Dù thế nào đi nữa, điều quan trọng là phải gắn bó với kiểu mã dù đúng hay sai. Các vấn đề tồi tệ hơn nổ ra từ các quy ước không nhất quán trong một dự án hơn là chỉ một cái gì đó xúc phạm đến mắt. Xem xét nhận được một số công cụ phân tích tĩnh và cấu hình chúng để duy trì tính nhất quán.