2016-10-31 20 views
10

Tôi biết rằng nhiều người đề nghị Công ước này:Quy ước đặt tên biến và phương thức cho các động từ boolean trong Java?

boolean deleted; 
boolean isDeleted(); 

Nhưng bạn sẽ làm gì khi bạn muốn đặt tên một boolean để cho biết rằng một người sử dụng có thể để lại?

boolean userCanLeave 
boolean isUserCanLeave() 

boolean canUserLeave 
boolean isCanUserLeave() 

boolean userLeave 
boolean isUserLeave() 

boolean userLeave 
boolean canUserLeave() 

Tôi không chắc liệu có bất kỳ chuẩn nào cho điều này hay bạn chỉ thực hiện một tiêu chuẩn mà bạn cho là dễ đọc nhất? Đó là biến để ánh xạ tên phương thức getter, điều thú vị ở đây.

+0

@TimBiegeleisen Không, tôi nghĩ đó là một kịch bản khác. –

+0

không, tôi nghĩ rằng đó là ít nhất một phần có liên quan, vì một số công nghệ dựa trên Java nhận ra dạng 'is' và' get' của getters. –

Trả lời

9

Bạn nên sử dụng tên biến tốt hơn như userAllowedToLeave.

Và sau đó sử dụng phương thức getter làm isUserAllowedToLeave().

Điều này ít nhất cũng sử dụng trình khởi động "là" và âm thanh cũng đúng về mặt ngữ pháp.

+0

Theo cách tôi đồng ý với bạn nhưng bạn không nghĩ rằng nó quá dài? "AllowedTo" và tiền tố "là" loại làm điều tương tự. "AllowedTo" chỉ làm cho nó có thể đọc được ngữ pháp hơn. –

+0

@TnHn - Nghe có vẻ tiết tú, nhưng, vẫn rất dễ đọc và dễ hiểu hơn. Tính hữu ích của "được phép" chỉ là làm cho tên đứng đúng ngữ pháp. Và, bạn không nên sử dụng 'enum' cho những trường hợp tầm thường như vậy; nó sẽ chỉ thêm vào mã phức tạp để hiểu và thực thi! –

1

Nhiều khuôn khổ vẫn sử dụng phương pháp gọi để thiết lập giá trị trên đậu, và các phương pháp đó cần phải phù hợp với một khuôn mẫu nhất định:

isXXX hay getXXX

Vì vậy, tôi cố gắng để dính vào đó, ngay cả khi tôi m không sử dụng các khung công tác để tạo ra các cá thể của các bean, hoặc nếu các khung công tác đó sử dụng sự phản chiếu để liên kết trực tiếp với các biến đó. Tôi vẫn nghĩ đó là thực hành tốt.

Vì vậy, getUserCanLeave()? Hoặc isUserLeavable()?

2

Sử dụng các toán tử như thế này hầu như luôn là ý tưởng tồi và khó hiểu. Nếu bạn muốn làm cho mã của bạn dễ hiểu và dễ bảo trì, bạn nên sử dụng một enum để biểu diễn trạng thái, có thể với các quy tắc chuyển tiếp mạnh (FSM).

Giả sử rằng khái niệm 'nghỉ' của bạn được dựa vào việc người dùng đã hoàn thành một nhiệm vụ hay tập hợp các nhiệm vụ, sau đó bạn có thể có

public enum UserState { inProgress, complete } 

Sau đó, bạn có thể thực hiện một phương pháp leave trên lớp người dùng của bạn như thế này :

public void leave() { if (state == UserState.complete) ... } 

trong đó state là trường hợp riêng tư của enum được xác định ở trên. Sau đó bạn có thể định lại câu hỏi là có thể chia sẻ thành getState, nếu cần thiết. Tất nhiên, bạn cũng cần một phương thức complete() sẽ thay đổi trạng thái một cách thích hợp và sẽ được gọi khi người dùng đã hoàn thành nhiệm vụ của mình.

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