[java] boolean (물음표 없음)을 반환하는 Java 메서드에 대한 명명 규칙

다른 언어의 메서드 / 함수 이름 끝에 물음표를 사용하는 것을 좋아합니다. Java는 이것을 허용하지 않습니다. 해결 방법으로 Java에서 부울 반환 메서드의 이름을 어떻게 지정할 수 있습니까? 을 사용하여 is, has, should, can어떤 경우에는 괜찮 방법 사운드의 전면입니다. 그러한 방법의 이름을 지정하는 더 좋은 방법이 있습니까?

예를 들어 createFreshSnapshot?



답변

대회는 이름으로 질문하는 것입니다.

다음은 JDK에서 찾을 수있는 몇 가지 예입니다.

isEmpty()

hasChildren()

이렇게하면 끝에 물음표가있는 것처럼 이름이 읽 힙니다.

컬렉션이 비어 있습니까?
이 노드에 자식이 있습니까?

그리고 나서, true예를 의미하고 아니오를 false의미합니다.

또는 주장처럼 읽을 수 있습니다.

컬렉션이 비어 있습니다.
노드에는 자식이 있습니다.

참고 :
때때로 메소드의 이름을 createFreshSnapshot?. 물음표가 없으면 이름은 스냅 샷이 필요한지 확인하는 대신 메소드가 스냅 샷을 작성해야 함을 의미합니다.

이 경우 실제로 무엇을 요구하는지 다시 생각해야합니다. 이와 같은 isSnapshotExpired이름은 훨씬 더 나은 이름이며 메서드가 호출 될 때 알려줄 내용을 전달합니다. 이와 같은 패턴을 따르면 부작용없이 더 많은 기능을 순수하게 유지할 수 있습니다.

Java API에서 Google 검색 을 수행 isEmpty()하면 많은 결과를 얻을 수 있습니다.


답변

클래스가 Java Beans 사양 과 호환되기를 원하면 리플렉션을 사용하는 도구 (예 : JavaBuilders , JGoodies Binding )가 getXXXX()또는 isXXXX()메서드 이름으로 부울 게터를 인식 할 수 있습니다 . Java Beans 사양에서 :

8.3.2 부울 속성

또한 부울 속성의 경우 getter 메서드가 패턴과 일치하도록 허용합니다.

public boolean is< PropertyName > ();

이것은 “<이다 PROPERTYNAME 방법 대신”GET <제공 될 수있다>는 ” PROPERTYNAME >”법, 그것은 “GET <외에 제공 될 수 PROPERTYNAME >”방법. 두 경우 모두 부울 속성에 대해 “is < PropertyName >”메서드가 있으면 “is < PropertyName >”메서드를 사용하여 속성 값을 읽습니다. 부울 속성의 예는 다음과 같습니다.

public boolean isMarsupial();
public void setMarsupial(boolean m);


답변

이 링크를 게시하고 싶습니다.이 답변을 확인하고 더 많은 자바 스타일 규칙을 찾는 친구들에게 더 도움이 될 수 있습니다.

자바 프로그래밍 스타일 가이드 라인

항목 “2.13 부울 변수 및 메서드에 사용되어야하는 접두사입니다.” 특히 관련성이 있으며 is 접두사를 제안합니다 .

스타일 가이드는 다음을 제안합니다.

일부 상황에 더 적합한 is 접두사에 대한 몇 가지 대안이 있습니다. 다음은 has , canshould 접두사입니다.

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

지침을 따르는 경우 적절한 방법이 다음과 같이 명명 될 것이라고 생각합니다.

shouldCreateFreshSnapshot()


답변

실패 할 수있는 메서드, 즉 반환 유형으로 부울을 지정하면 접두사를 사용합니다 try.

if (tryCreateFreshSnapshot())
{
  // ...
}

다른 모든 경우에는 is.. has.. was.. can.. allows....


답변

표준은 ‘is’또는 ‘has’를 접두사로 사용하는 것입니다. 예를 들어 isValid, hasChildren.


답변

is내가 다른 어떤 것보다 더 많이 만난 것입니다. 하지만 현재 상황에서 의미가있는 것이 최선의 선택입니다.


답변

일반적인 명명 규칙 에 대해 다른 관점을 가리키고 싶습니다 . 예 :

java.util.Set 참조 :boolean add​(E e)

근거는 다음과 같습니다.

일부 처리를 수행 한 다음 성공 여부 보고 합니다 .

(가) 동안 return실제로하는 boolean메소드의 이름을 가리켜 야한다 완료 처리를 대신의 결과 유형 (이 예를 들어, 부울).

귀하의 createFreshSnapshot예는 다음을 의미하는 것처럼 보이 므로이 관점과 더 관련이있는 것 같습니다. 새 스냅 샷을 만든 다음 만들기 작업이 성공했는지보고하십시오. 이러한 추론을 고려할 때 이름이 createFreshSnapshot귀하의 상황에 가장 적합한 것 같습니다.