Đối với tôi, việc tìm một cái tên hay cho một thứ gì đó luôn quay trở lại khi nghĩ về nó như một đối tượng phải chứng minh sự tồn tại của nó. Tự hỏi mình đi:
- Lớp / phương thức / biến làm gì, nghĩa là mục đích rộng hơn của nó là gì và để làm gì?
- Điều gì đặc biệt về mục đích của nó mà nó cần để giao tiếp, tức là phần thiết yếu mà cái tên cần phải có trong đó là gì?
Hầu hết các nhà phát triển sẽ đồng ý rằng khả năng đọc luôn là điều tối quan trọng khi nói đến việc đặt tên. Đừng chỉ viết mã để bạn biết ý của bạn trong khi bạn viết nó, hãy viết nó để ai đó nhìn vào mã lần đầu tiên tại một thời điểm nào đó trong tương lai biết ý của bạn mà không phải suy nghĩ quá nhiều. Bạn sẽ viết mã chỉ một lần, nhưng trong suốt vòng đời của nó, rất có thể nó sẽ phải được chỉnh sửa nhiều lần và đọc nhiều lần hơn nữa.
Mã phải được tự ghi lại, đó là, việc đặt tên của bạn sẽ làm cho nó rõ ràng những gì làm. Nếu bạn cần giải thích một dòng mã làm gì trong một nhận xét và đổi tên mọi thứ không cải thiện đủ, bạn nên nghiêm túc xem xét việc tái cấu trúc dòng đó thành một phương thức mới với một tên mô tả phù hợp, để đọc phương thức ban đầu, cuộc gọi phương thức mới mô tả những gì đang xảy ra. Đừng sợ có tên dài; tất nhiên bạn không nên viết tiểu thuyết bằng tên lớp / phương thức / biến, nhưng tôi muốn có một cái tên quá dài và mô tả hơn là quá ngắn và tôi cần phải tìm ra những gì nó làm bằng cách nhìn dưới mui xe. Ngoại trừ một số trường hợp ngoại lệ rõ ràng như tọa độ x / y và các từ viết tắt thường được sử dụng, tránh các tên và ký tự viết tắt. Gọi một cái gì đó "bkBtn" thay vì "backButton"
Nhiều như ngôn ngữ của bạn cho phép, làm cho mã của bạn đọc giống như một câu tiếng Anh. Đối tượng sử dụng danh từ, phương thức sử dụng động từ. Các phương thức Boolean thường bắt đầu bằng "là", nhưng có nhiều tùy chọn khác truyền đạt ý nghĩa thậm chí còn tốt hơn, tùy thuộc vào trường hợp sử dụng, chẳng hạn như "có thể", "nên" hoặc "không". Tất nhiên, không phải tất cả các ngôn ngữ đều có thể tốt như Smalltalk về điều này, nhưng một số biểu tượng thường được hiểu là một phần của câu. Hai công ước Smalltalk mà cá nhân tôi muốn đưa vào các ngôn ngữ khác càng nhiều càng tốt là tiền tố tên của các tham số vòng lặp với "mỗi" và các tham số phương thức tiền tố với bài viết "a" (hoặc "an" hoặc "some" cho các bộ sưu tập) . Đây có thể không phải là một tiêu chuẩn phổ biến trong Java và bất kỳ ai cũng được hoan nghênh bỏ qua bit này, nhưng tôi thấy rằng điều này giúp tăng cường khả năng đọc mã. Ví dụ (ví dụ trong Java):
public boolean shouldConsiderAbbreviating(List<String> someNames) {
for (String eachName : someNames) {
if (isTooLong(eachName)) {
return true;
}
}
return false;
}
Điều này có thể đọc được đối với những người chỉ cần một chút kiến thức về Java như một thứ như thế này:
Để xác định xem bạn có nên xem xét viết tắt một danh sách một số tên (là các chuỗi) hay không, lặp lại một số tên và đối với mỗi tên, hãy xác định xem nó có quá dài không; nếu vậy, trở về true
; Nếu không quá dài, trở lại false
.
Đối chiếu mã trên chỉ với việc đặt tên đối số strings
và biến vòng lặp string
, đặc biệt là trong một phương thức phức tạp hơn. Bạn sẽ phải nhìn kỹ để thấy sự khác biệt thay vì việc sử dụng là rõ ràng từ một cái nhìn thoáng qua vào tên.