Đặt tên trường boolean là một động từ


13

Trong Java, theo quy ước getter và setter cho các trường boolean sẽ isField()setField(). Này hoạt động hoàn toàn tốt đẹp với tên trường được tính từ thích active, visible, closedvv

Nhưng làm thế nào để tôi đặt tên cho một lĩnh vực có ý nghĩa của một động từ, như thế haveChildrennào? Thêm ngôn ngữ _ing vào động từ ( ), có thể?havingChildren

Để làm rõ, tôi không có quyền kiểm soát tên phương thức (getter và setter) vì chúng được IDE tự động tạo. Vì vậy, cái tôi cần là một tên trường thích hợp để khi IDE tạo ra một getter cho nó, nó có ý nghĩa. Ví dụ, hasChildrenlà một tên trường hoàn hảo, nhưng khi IDE tạo getter cho trường thì nó sẽ là isHasChildren. Tôi giải quyết điều này như thế nào?


3
Nếu đây là một trường bool, parentsẽ hoạt động.
yannis

2
Nếu bạn có thể thoát khỏi ý nghĩa đảo ngược, 'trẻ con' sẽ lừa.
Kilian Foth

3
Có vẻ ngớ ngẩn khi phải nhảy qua các vòng liên quan đến tên của một lĩnh vực để tránh một vấn đề ngữ pháp gây ra bởi IDE. Bất kể, đây là một số đề xuất bổ sung, mặc dù tôi nghĩ rằng những đề xuất đã được người khác đưa ra là tốt hơn: is ALLowedChildren, isNotEmpty, isContainer, isLeaf,
Tiến sĩ Wily's Apprentice

trẻ con dường như là con đường để đi. Vấn đề với cha mẹ là tôi đã có một trường cha mẹ để giữ tham chiếu đến đối tượng cha. Tôi nghĩ rằng những gì tôi cần là một quy tắc chung để chuyển đổi tất cả các động từ thành tính từ cho các trường boolean.
dnang

1
Tôi đồng ý với @dnhang rằng bạn không nên để IDE ra lệnh những thứ như thế này. Việc chọn tên biến và tên phương thức rất quan trọng để làm cho mã của bạn có thể đọc được, IDE mà nó được viết nên không liên quan.
Digitalex

Câu trả lời:


10

Câu trả lời ngắn:

  • tên phương thức không được cung cấp để phản ánh việc thực hiện nội bộ nhưng hành vi dự kiến.

Câu trả lời dài:

haveChildren()nên được đặt tên hasChildren().

Ngoài ra tôi không thấy hasChildren()nhất thiết phải là người bắt đầu cho một thành viên lớp boolean. Tôi đoán một phương pháp như vậy sẽ tìm ra liệu một thành viên của loại Collectioncó trống hay không.

Tên mặc định mà IDE đặt cho các getters và setters đã tạo không được coi là một luật được đặt trong đá.

Một điểm khác: Các giao diện có tên cho các phương thức chưa được triển khai.

Nếu tên phương thức được cung cấp để phản ánh việc triển khai nội bộ, làm thế nào một người nào đó có thể thiết kế giao diện? Các giao diện không có triển khai và họ cũng không biết trước những gì người triển khai sẽ làm dưới mui xe.

Lấy ví dụ Iterator giao diện trong Java.

Khi bạn thực hiện Iterator, ngay cả khi bạn có một thành viên boolean được đặt tên next, bạn không được phép đổi tên hasNext()thành isNext()hoặc isHavingNext(). Đó là một chi tiết thực hiện. Trên thực tế, tôi đã thực hiện Iteratorvà những gì tôi làm là có một thành viên thuộc loại người mà lớp tôi có một danh sách, được đặt tên next(không phải là boolean). hasNext()sau đó trở vềnext!=null .

Ngoài ra, xem điều này:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

Lưu ý rằng isDead()không có getter bình thường.

Sử dụng các công cụ năng suất của IDE cho những gì chúng là.


3

Tôi sẽ đề nghị đổi tên trường thành parentđể getter sẽ isParentvà setter sẽ làsetParent .

Bạn cũng có thể thử childPresenttên biến isChildPresentsetChildPresentlà getter và setter.


1
Cùng một ý tưởng như nhận xét của Yannis ở trên nhưng vấn đề là tôi đã có một parenttrường để giữ tham chiếu đến đối tượng cha. Tôi nghĩ rằng những gì tôi cần là một quy tắc chung để chuyển đổi tất cả các động từ thành tính từ cho các trường boolean.
dnang

0

Bạn có thể đặt doestrước động từ. Chẳng hạn như doesHaveChildrentrong ví dụ của bạn, bạn cung cấp. Hoặc có lẽ shouldHaveChildrentùy thuộc vào bối cảnh.


1
Vấn đề là, tôi không có quyền kiểm soát tên phương thức vì getter và setter được IDE tạo tự động (ví dụ: Eclipse).
dnang

1
Chỉ cần đổi tên phương thức? Thêm một keybind để đổi tên phương thức (nếu bạn chưa có phương thức nào).
Miguel.martin

@dnhang nếu đó là mã của bạn, bạn có thể gọi các phương thức bất cứ thứ gì bạn thích, bất kể IDE gọi chúng là gì khi nó tự động tạo.
Richard

1
@ Miguel.martin Một lý do bạn không muốn làm điều này là Java-bean. Giả định isSomethinglà một phần của đặc điểm kỹ thuật đó và nhiều giả định được đưa ra xung quanh nó, dù tốt hay xấu, đi ngược lại với điều này có doesSomethingthể sẽ phá vỡ mọi thứ theo những cách không quá rõ ràng, dẫn đến lỗi.

0

Câu hỏi là hoàn toàn hợp lý. Đôi khi đổi tên phương thức tạo tự động là không đủ. Ví dụ: Các bean được quản lý JSF dự kiến ​​sẽ có isXyz()phương thức getter của một thuộc boolean xyztính.

Tôi đồng ý với BlackPanther, người đề nghị đổi tên trường thành parentvà sử dụng isParentlàm tên phương thức. Theo nguyên tắc ẩn thông tin, khả năng đọc của phương thức getter và setter quan trọng hơn thuộc tính.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.