Đối với một trường boolean, quy ước đặt tên cho getter / setter của nó là gì?


178

Ví dụ.

boolean isCurrent = false;

Bạn đặt tên cho getter và setter của nó là gì?


2
Tôi giả sử bạn đang đề cập đến JavaBeans trong trường hợp câu trả lời của @Jigar Joshi là chính xác. Tuy nhiên, nếu bạn đang hỏi về getter / setters chung, điều duy nhất là các phương thức chứa tên của trường và getter không có đối số và trả về một giá trị, setter lấy một đối số và không trả về giá trị hoặc trả về chính đối tượng. xem Buffer như một ví dụ về cách tiếp cận khác với getter / setters.
Peter Lawrey

Câu trả lời:


254

Giả sử bạn có

boolean active;

Phương thức truy cập sẽ là

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}

Xem thêm


9
Bạn có thể chỉ ra phần của các quy ước mã của Sun trong đó các tên getter boolean được đề cập cụ thể không? Tôi không thể tìm thấy nó.
Konstantin Pelepelin

4
Tôi có một boolean được đặt tên hasCustomName, Bây giờ tôi nên đặt tên gì cho các phương thức gettersetter ? Là setHasCustomName[setter]hasCustomName[getter]tốt?
Hadi

@Hadi chỉ cần đặt tên biến của bạn là "customerName" và tạo getter n setter cho nó. Dự kiến ​​getter và setters là public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd

1
Làm thế nào chúng ta có được từ tên tùy chỉnh để tên khách hàng? ;)
Kartik Chugh

1
@Assegd Đặt tên nó là "customerName" hoặc "customName" gây nhầm lẫn và không biểu thị rằng đó là boolean. Nhìn thấy biến tôi mong nó chứa tên. Trong trường hợp này, nó phải được gọi là IMO "hasCustomName".
Nathan

83

http://geosoft.no/development/javastyle.html#Specific

  1. is tiền tố nên được sử dụng cho các biến và phương thức boolean.

    isSet, isVisible, isFinished, isFound,isOpen

Đây là quy ước đặt tên cho các phương thức boolean và các biến được Sun sử dụng cho các gói lõi Java. Sử dụng tiền tố là giải quyết một vấn đề phổ biến là chọn các tên boolean xấu như trạng thái hoặc cờ. isStatus hoặc isFlag đơn giản là không phù hợp và lập trình viên buộc phải chọn những cái tên có ý nghĩa hơn.

Các phương thức Setter cho các biến boolean phải đặt tiền tố như trong:

void setFound(boolean isFound);

Có một vài lựa chọn thay thế cho tiền tố phù hợp hơn trong một số tình huống. Đây là những tiền tố có, có thể và nên:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;

7
Vậy nếu có thuộc tính boolean hasData, setter sẽ trông như thế nào? Chắc chắn, có setData(bool hasData)vẻ rất sai đối với tôi ...
Franz B.

7
@FranzB. Tôi sẽ sử dụng setHasData (...)
user362178

2
Đối với những người muốn sau JavaBeans specifcation, có vẻ như has, can, shouldtiền tố không phải là một phần của đặc tả. Tham khảo Đặc tả JavaBeans 1.01 phần 8.3.
VCD

@Andrew hi. Khi tôi đang sử dụng tiền tố 'là' trong biến của mình và gửi giá trị của biến đó từ tệp js của tôi trong dữ liệu, nó luôn cho tôi giá trị là sai. Và nếu tôi loại bỏ tiền tố 'là' thì nó hoạt động rất tốt. Điều gì có thể là lý do cho điều đó? Cảm ơn trước.
Me_developer

1
Các setter rất đơn giản, đối với getter tôi phải sử dụng boolean isIsCurrent(){...}nếu không thì khung được sử dụng để giải tuần tự hóa đối tượng, đã phàn nàn getter not found for property isCurrent.
Maurizio Lo Bosco

67

Đối với một trường được đặt tên isCurrent, việc đặt tên getter / setter chính xác là setCurrent()/ isCurrent()(ít nhất đó là những gì Eclipse nghĩ), rất khó hiểu và có thể được truy trở lại vấn đề chính:

Lĩnh vực của bạn không nên được gọi isCurrentở nơi đầu tiên. một động từ và động từ không phù hợp để đại diện cho trạng thái của Object. Thay vào đó, hãy sử dụng một tính từ và đột nhiên tên getter / setter của bạn sẽ có ý nghĩa hơn:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}

4
Điều gì xảy ra nếu boolean không phải là nguyên thủy? Nếu nó là Boolean thì nó có nên lấy hay không?
Arun

2
Không, một phương thức như vậy có thể trả về null, điều này sẽ gây ra NullPulumException. Nhưng tôi sẽ cố gắng tránh trở lại Boolean ngay từ đầu
Sean Patrick Floyd

3
@Arun Tôi nghĩ rằng nó nên được đặt / get thay vì nếu set / là vì Boolean là một đối tượng thay vì nguyên thủy, bởi vì nó có 3 số liệu thống kê, sai, đúng hoặc không.
Al-Mothafar

1
IntelliJ mặc định sử dụng gettiền tố khi truy xuất Booleanvs so isvới aboolean
jocull 14/2/19

1
@jocull và đó là hành vi đúng, theo đặc tả của JavaBeans
Sean Patrick Floyd

6

Tôi tin rằng nó sẽ là:

void setCurrent(boolean current)
boolean isCurrent()

1
Tôi thích quy ước đó, nhưng các quy ước không thực sự quan trọng. Điều quan trọng nhất là gắn bó với người bạn đã chọn.
Clement Herreman

4
Các quy ước @Clement vấn đề khi bạn dựa vào các công cụ sử dụng các quy ước này. JavaBeans là một quy ước với sự hỗ trợ rộng rãi trong nhiều thư viện (JSP / JSF / Spring / Groovy chỉ để đặt tên cho một số). Phá vỡ các quy ước có nghĩa là phá vỡ cách thức hoạt động của các thư viện này.
Sean Patrick Floyd

1
@Sean Right, ngoại trừ khuôn khổ dựa trên các quy ước về cấu hình. Trong trường hợp này, các quy ước được áp đặt bởi khung, vì vậy bạn không chọn bất cứ điều gì. Nhận xét tốt.
Clement Herreman

5

Có lẽ đã đến lúc bắt đầu sửa đổi câu trả lời này? Cá nhân tôi sẽ bỏ phiếu cho setActive()unsetActive()(lựa chọn thay thế có thể được setUnActive(), notActive(), disable(), vv tùy thuộc vào ngữ cảnh) vì "setActive" ngụ ý là bạn kích hoạt nó bất cứ lúc nào, mà bạn thì không. Đó là loại phản trực quan để nói "setActive" nhưng thực sự loại bỏ trạng thái hoạt động.

Một vấn đề khác là, bạn không thể nghe cụ thể một sự kiện SetActive theo cách CQRS, bạn sẽ cần lắng nghe 'setActiveEvent' và xác định bên trong rằng wether của người nghe có thực sự được kích hoạt hay không. Hoặc tất nhiên xác định sự kiện nào sẽ gọi khi gọi setActive()nhưng điều đó đi ngược lại nguyên tắc Tách biệt các mối quan tâm.

Đọc tốt về điều này là bài viết FlagArgument của Martin Fowler: http://martinfowler.com/bliki/FlagArgument.html

Tuy nhiên, tôi đến từ một nền tảng PHP và thấy xu hướng này đang được áp dụng ngày càng nhiều. Không chắc chắn bao nhiêu điều này sống với sự phát triển Java.


-1
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}

3
Có gì hiện tại? Tôi nghĩ hasđược sử dụng cho BO hoặc một dịch vụ như vậy với một số xử lý trong khi đối với POJO is. và xin vui lòng thêm một số mô tả về câu trả lời của bạn.
Al-Mothafar

-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

Đối với booleans bạn cũng có thể sử dụng

public boolean isCurrent()

11
Bởi vì OP nêu một câu hỏi về các giá trị boolean. Một getter có tiền tố 'get' là (đọc: nên) không bao giờ được sử dụng cho các giá trị boolean.
Harold

-4

Là một setter, làm thế nào về:

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

hoặc là

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

Tôi không chắc những cách đặt tên này có ý nghĩa với người nói tiếng Anh bản địa hay không.


1
Họ không thực sự có ý nghĩa
Yannjoel

Nhưng âm thanh có thể hứa hẹn với một số thuộc tính :)
seba.wagner
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.