부울 방법의 이름 지정 : vs. can vs.?


51

부울을 리턴하는 메소드의 이름 중 어느 것이 더 낫습니까?

IsSupportContentType

또는

CanSupportContentType

9
의도는 이름이 상태 또는 동작을 명확하게 전달하기위한 것이며 "이 클래스는 컨텐츠 유형 X를 지원합니다"라고 말하지 않을 것이므로 더 나은 이름은 CanSupportContentType입니다. "이 클래스는 컨텐츠 유형 X를 지원할 수 있습니다."와 같은 것을 말할 것입니다.
Craig

8
아니 네이티브 스피커가 아닌 것 않습니다 SupportContentType 가장 "문법"옵션을 수?
로마 라이너 2017 년

8
첫 번째는 IsSupportedContentType문법적으로 정확해야합니다. ( "지원 컨텐츠 유형"이 명사로 작동하지 않는 한, 가능성이 거의없는 것 같습니다)
CodeInChaos

30
간단히 supportsContentType? 다음은 완전히 읽을 수 if (abc.supportsContentType("text/html"))있습니다. "지원할 수있다"는 콘텐츠 유형을 지원하기위한 추가 조건이 있음을 의미합니다.
Olivier Grégoire

10
@WeylandYutani IsCanHasSupportCheezburger?
RM

답변:


106

대 수

Microsoft 명명 규칙 권장 사항 에 따르면 "Is"와 "Can"은 모두 부울의 접두사로 OK입니다 (또한 "Has").

일반 영어에서는 "Is"를 사용하여 수행 할 수있는 것이 아니라 유형 자체에 대한 무언가를 식별합니다. 예를 들어, IsFixed, IsDerivedFrom, IsNullable모든 CLR 유형과 방법에서 찾을 수 있습니다. 이 모든 경우에 "Is"뒤에 형용사붙습니다 .

한편, "수"는 더 명확하게 예를 들면, 능력을 나타냅니다 CanEdit, CanRead, CanSeek. 이러한 각 경우에 can 다음에 동사붙습니다 .

"지원"은 동사이므로 귀하의 경우 CanSupportContentType에는 더 좋습니다.

더 짧은 대안

반면, 규칙에 따르면 접두어는 선택 사항입니다. 또한 개발자가 intellisense에서 인수의 유형을 볼 수 있기 때문에 메소드 이름에 인수 유형을 포함시키는 것이 좋습니다. 그래서 당신은 할 수 당신의 방법을 이름 Supports과 같이 그것을 정의 :

public bool Supports(System.Net.Mime.ContentType contentType)

... 짧고 여전히 목적을 명확하게 전달합니다. 당신은 이것을 다음과 같이 부를 것입니다 :

ContentType contentType = new ContentType("text/plain");
var someClass = new MediatorsClass();
bool ok = someClass.Supports(contentType);

또는 타협으로 이것이 가장 좋습니다.

public bool CanSupport(System.Net.Mime.ContentType contentType)

53
잘 읽을 때 좋습니다 :if ( someClass.Supports(contentType) )
candied_orange

5
hasSupportedContentType
Bergi

8
"CanSupports"이니셜 티 (initialy)라는 방법을 사용하면 소프트웨어를 통해 캔을 지원할 수있는 시간을 누가 보냈는지 궁금해 할 수있었습니다. "지원"만 더 나은 옵션입니다.
T. Sar-복직 모니카

6
영어가 모국어가 아닌 경우와 같이 개발자가 무언가 "이상하게 들린다"고 말할 수없는 경우가 있습니다.
John Wu

4
때로는 더 짧은 버전이 더 나쁩니다. 예를 들어 C ++ 표준 라이브러리에 있습니다 std::vector::empty(). 이름만으로 벡터를 비웁니까? 아니면 벡터가 비어 있는지 여부를 반환합니까? 이전 작업이에 의해 수행되었으므로 실제로 후자가 수행됩니다 std::vector::clear(). 그러나 일반적으로 문서를 반드시 읽으십시오. 반대의 예로서, QVector공허를 확인하는 방법이 이므로 Qt 는 이해하기 쉽다 QVector::isEmpty().
Ruslan

9

" should "접두사도 사용할 수 있습니다. " 할 수있는 것 "과 " 해야 할 것 " 뿐만 아니라 Apple의 지침 에 따르면 , 일반적으로 모달 동사는 부울을 반환하는 함수의 이름을 지정하는 데 사용될 수 있습니다. " will "를 많이 사용하는 것을 볼 수는 없지만 reactjs에서 볼 수 있듯이 " should "는 조언을 구하는 데 유용합니다.

shouldComponentUpdate: (newProps: any) => boolean

19
해야는 "음, 꽤 가난한 명명 이럴되어 있어야 문서를 닫습니다,하지만 난 사실은 꽤 잘 모르겠어요"
Lovis

1
@lovis : Harry의 의견이 매우 유효하다고 생각합니다. 예를 들어 플러그인 계층을 통해 일부 데이터베이스 관련 작업을 위임 할 수 있습니다. 각 플러그인에는 "ShouldCloseConnection"메서드가있어 정리 작업을 프레임 워크에 알려줍니다. 예를 들어 "should"는 유효한 접두사입니다.
greg

1
@greg 어떻게 모호하지 WillCloseConnection않습니까?
기본

@Lovis 우리는 일반적으로 함수 인수 이름에서 사용 is...하지만 should...부울 이 함수가 변경해야 할 것을 나타내는 위치 를 사용합니다 . 함수가 문서를 선택적으로 닫을 수 있다면 매개 변수 제어를 호출하면 isClosed정확합니다 ( 아직 닫히지 않았습니다 ). 그래서 shouldClose함수가 수행 해야하는 작업임을 나타냅니다. (임의의 예; 특히 문서를 닫는 것이 전용 호출을하기에 충분히
무거워

@Basic 적어도 우리의 경우, will...약속을 반환하는 비동기 함수를 위해 예약되어 있습니다. 이전 주석에 설명 된 기능이 동 기적 인 경우 사용 will...이 명명과 일치하지 않습니다.
KRyan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.