Java 부울 게터 "is"대 "are"


91

부울 게터에 대한 Java의 규칙은 접두사 "is"를 포함한다는 것을 알고 있습니다.

isEnabled
isStoreOpen

그러나 주제가 복수라면 어떨까요? 즉, 매장이 열려 있는지 알고 싶지 않고 모든 매장이 열려 있는지 알고 싶다면 어떻게해야할까요?

isStoresOpen() 영어로는 말이되지 않습니다.

다음과 같은 게터를 작성하고 싶습니다.

areStoresOpen
areDogsCute
areCatsFuzzy

그리고 그게 나을 생각하지만, 난 그냥 그것을 빨아 계약 및 사용 동사 주제를 포기해야 다른 사람이 들었어요 isStoresOpen, isDogsCute, isCatsFuzzy.

어쨌든, 복수 주제에 대해 작동하는 부울 게터에 대해 어떻게해야합니까?


3
are*()게터 전에는 본 적이 없습니다 .
rekire

21
are*()문법적으로 정확하다면 항상 getter를 작성 합니다.
냉동 완두콩의 Roddy

2
당신의 개체가 콩이라면, 나는 당신이 is또는 has... 을 고수해야한다고 생각합니다 .
assylias

4
are * () getter를 사용하는 경우 대부분의 경우 boolean []을 반환해야합니다.
Juvanis

2
아주 좋은 질문입니다. 이것을 직접 궁금해했습니다. 많은 답변이 이미 지적했듯이 대부분의 프레임 워크, IDE 및 내가 만난 규칙에 의존하는 모든 것은 "get"/ "set"/ "is"패턴을 사용합니다. 이것이 당신의 응용 프로그램에서 문제가되지 않더라도, 나는 그 규칙을 따를 것입니다. 일관된 명명 규칙을 유지한다면 (때때로 문법적으로 이상하게 들리지 않더라도) 당신의 코드를 따르기가 훨씬 쉬울 것입니다. ).
Paul Richter

답변:


57

이 책이 어떤 책에서 왔는지 기억할 수 없지만 본질은 코드가 쓰여진 것보다 더 많이 읽힐 것이라는 것입니다. 가독성을 위해 작성하십시오.


20
Clean Code-Robert Martin
John B

John B : 나는 그 책을 읽지 않았습니다. 아마도 나는 그것에 대한 참조를 읽었습니다. 그래도 내 목록에 대한 또 다른 책. :)
John

8
하지만 너무 멀리 가지 않도록 조심하세요. storesAreOpen()(때문에 if(storesAreOpen())) 가장 문법적 일 수 있지만 이름의 부울 부분은 이제 메소드 이름 중간에 숨겨져 Java 규칙 읽을 수있는 코드 를 위반 합니다.
Izkata 2010 년

3
그는 매우 일반적인 방식으로 질문에 대답합니다. 그가 구체적인 사항을 다루지 않는 것은 사실이지만 이것은 대답입니다. 진부 해 보일지 모르지만 가치가 있습니다 (최소 24 명이 그렇게 생각합니다).
조지 스토커

4
대답을 명확히하기 위해 areStoresOpen () 이 여기에 좋은 선택 이라는 설명을 추가 합니다.
kiedysktos

95

괜찮은 영어와 Java 표준을 따르는 것은 어떻습니까?

isEveryStoreOpen() 또는 isEachCatCute()

올바른 단어가 의심 스러울 때 나는 항상 동의어 사전을 치는 것을 좋아합니다.


19
+1, 이것은 모호한 isStoresOpen ()과 달리 반환 된 값이 isEveryStoreOpen () 또는 isAnyStoreOpen ()을 의미하는지 명확하게 전달합니다.
Imre

5
+1 이것은 받아 들여진 대답이어야합니다! Java booleanis접두사 규칙 을 유지하면서 문법적으로 의미가 있습니다. 또한 코드베이스의 관리자가되는 비영어권 사용자에게 정말 유용한 약간의 추가 정보를 제공합니다 .
higuaro

1
이 대답은 내 인생을 바 꾸었습니다! 그리고 그것은 받아 들여진 대답이어야합니다.
Marcel Blanck 19 년

34

관례는 변수 자체가 아닌 "is"를 getter-method 앞에 붙이는 것입니다.

예 :

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

isStoresOpen ()은 영어에서 의미가 없습니다.

문법적으로 의미가 없을 수도 있지만 관례를 따르고 충분히 읽기 쉬워 보입니다.


귀하의 답변은 의미가 있으며 감사합니다. 나는 권위있는 옳고 그른 입장에서 당신이 옳다고 생각합니다. 규칙을 고수하기 위해 그 목적을 버리고 명확하고 명확하며 이해하기 쉽게함으로써 우리를 돕도록 의도 된 규칙을 원하지 않습니다. 하지만 당신 말이 맞아요. 이것이 바로 이것이 제가 물은 것입니다.
kodai

@kodai : 규칙으로 간주해서는 안된다고 생각합니다. 그러나 필자는 규칙을 따르지 않는 코드를 작성하는 것이 필요하지 않은 경우 코드를 읽을 수 있도록 만드는 것이 방법이라고 생각합니다.
Bhesh Gurung

18

자바 콩 사양은 사용 말한다 get그것이 아니라면 게터에 대한 boolean다음 사용 is. are비표준이며 표준 Bean 이름 지정을 예상하는 어떤 것으로도 인식되지 않습니다.


17

많은 도구가를 예상 is하거나 get인식하지 못할 것 are입니다.

같은 그들을 문구를 수정 시도 getDogsAreFuzzy()하거나 getStoresAreOpen()또는 더 나은 호환성과 규칙에 대한 그런 것들.


예. 빈 유틸리티와 같은 도구 부울 게터를 찾는 것입니다.
nalply

4

- isEnabled() 다음과 같이 작성할 수도 있습니다 getEnabled().Java naming conventions .

- 명명 규칙을 따르는 것은 좋은 습관이며 Java Beans.


3

일반적으로 코드는 가능한 한 쉽게 읽을 수 있어야 메소드를 거의 단락처럼 읽을 수 있어야한다고 생각합니다 Clean Code. 따라서 가능한 한 쉽게 소리 / 읽기 방법을 지정하고 문법 규칙 인 are. 최신 IDE를 사용하면 특별히 get/ 를 찾지 않고도 메서드를 쉽게 찾을 수 있습니다.is .

그러나 Kumar는 콩에 대해 좋은 지적을합니다. 많은 도구는 get/ 만 찾습니다 is. 이 경우 두 가지 방법을 모두 고려할 수 있습니다. 하나는 읽기 쉽고 하나는 도구 사용을위한 것입니다.


3

어떤 언어로 작성합니까 : 영어 또는 Java 합니까 ?

내가 자바 코드를 읽을 때, 내가 거기에있을 것으로 기대한다. 두 getter를 isare 접두사로 검색하는 것은 단지 하나의 접두사를 검색하는 것보다 더 복잡 할 것이다.

그런데 아침에 신문을 읽을 때는 아무것도 찾지 않기 때문에 좀 더 전통적인 영어로 글을 쓸 수 있습니다.

반환 0;


3

귀하의 질문에서 귀하는 게터에 대해 명시 적으로 질문하고 있습니다. getter는 클래스의 한 인스턴스에 대한 정보를 반환합니다. 예를 들어 클래스가 Store있습니다. 지금,isStoreOpen 게터에 대한 완벽하게 훌륭한 메서드 이름입니다.

다음으로 모든 상점이 열려 있는지 확인하는 방법을 언급합니다. 이 메서드는 하나의 인스턴스에 대한 정보가 아니라 전체에 대한 정보를 반환하기 때문에 전혀 getter가 아닙니다. 물론 수업이 없다면Stores . 이 경우 Java에는 이미 배열이나 컬렉션과 같은 여러 인스턴스를 저장하는 방법이 있으므로 추가 클래스를 작성할 필요가 없기 때문에 디자인을 다시 생각해야합니다.

그렇지 않은 경우이 메서드 이름은 완벽합니다. 대안은 allStoresOpen'is'가없는 것일 수 있습니다 .

요약 : 여러 인스턴스를 처리하는 경우 게터가 아닙니다. 그렇다면 디자인이 나쁘다.


2

솔직히 나는 잊어 확실히 말할 것 are*와 함께 스틱 is*. "is"변수 의미로 생각 하고 가능하면 더 나은 이름을 만드십시오.

나는 isStoresOpen이 그렇게 나쁘게 들리지 않는다고 말할 수 있지만, 그것이 당신에게 더 좋게 들리면 isStoresAreOpen을 만들 수 있습니다.

그러나 나의 일반적인 생각은 관습을 고수하는 것입니다. getter에는 "get"을 사용하고 boolean 유형에는 "is"를 사용합니다. 개인적으로 "is"를 사용하는 것은 때때로 이미 문제가 있다고 생각합니다. 예- "if"조건에서 좋아 보이지만 때로는 코딩 할 때 "get"이라고 쓰고 필요한 변수에 대한 드롭 다운 목록을 확인한 다음 무엇이 잘못되었는지, 왜 찾을 수 없는지 궁금해하기 시작합니다. "is"로 시작 ...


1

어느 경우 객체 지향 프로그래밍에서, 이것은 거의, 이후 발생하지 않습니다 Store또는 Cat또는 무엇 자체로, 별도의 클래스해야이 isOpen()또는 isFuzzy()방법. 더 높은 유형이있는 경우 실제로 사용중인 더 원자 수준으로 분할하는 것을 고려하십시오. 일반적으로 객체는 최하위 수준에서 복수형이 아니어야합니다.


1

isStoresOpen () 은 복수형처럼 보입니다.

Java Naming Convention 및 Java Beans Standards를 따를 때 boolean 및 기타 유형에 대해 사전 정의 된 접두어가 있으므로 Java Beans Naming Convention을 따라야합니다.

당신 이 영어 장래성에서와 같이 storesOpen 을 볼 때 당신의 요점에 오십시오 , 그렇습니다 그것은 복수처럼 보입니다. 다시 한 번 그 단어를 깊이 관찰하십시오.

여기

storeOpen 은 영문법에 따라 복수,

isStoresOpen결과 는 복수형이 아니라 단수형이거나 프로그래밍 규칙 측면에서 스칼라라고 말할 수 있습니다.

출력은 부울, 참 또는 거짓입니다.

당신의 영어 복수 진술이 또는 거짓 과 같지 않음

의 안 배열 또는 거짓 의 여부를 컬렉션 진실 혹은 거짓

그래서 여기서 우리는 현실 세계 엔티티를 가리 키기 위해 클래스의 속성에 주어진 이름이 아니라 그 부울 빈 메서드에서 반환되는 값에 관심이 있다고 말할 수 있습니다.

한 가지 더 중요한 점은 이러한 부울 속성이 클래스에서 사용되고 이러한 속성이 모든 프레임 워크의 사전 정의 된 라이브러리에서 사용될 때마다 사용 접두사가 '인 프레임 워크 부울 값을 검색하는 데'입니다.

복수 / 단수, 멀티플렉서 등과 같은 영문법을 아는 것만 큼 당신보다 훨씬 똑똑하지 않다는 것을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.