부울 메서드 이름 지정 확인 대 부정


43

부울 메소드는 항상 부정적인 형태로만 사용될 때에도 항상 긍정적 인 형태를 취해야합니까?

엔티티를 작성하기 전에 엔티티가 존재하는지 확인하고 싶다고 가정하십시오. 내 주장은 메소드가 긍정적 인 형식으로 사용되는지 여부에 관계없이 아래의 첫 번째 양식이 두 번째 양식보다 낫다는 것입니다.

요약하면, if(!affirmative)보다 읽기 쉽습니다 if(negative). 의견에 동의하지 않는 동료가 있습니까?

첫 번째 형태 :

int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);

두 번째 형태 :

int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);

3
C ++? 방법에 대한if (not entity_exists(entity_id))
코스


할 수있다. 솔직히, 나는 !문자를 너무 많이 그리워서 다시 읽을 때까지 코드를 잘못 이해하게되었습니다. 아마 나는 당신의 동료와 더 동의 할 것입니다. 검사 할 때 참으로 평가되는 양식이 마음에 듭니다.
Berin Loritsch

if (!exists) create()스레드 안전하지 않은 경향이 있기 때문에 많은 언어 / 프레임 워크에서 나쁜 습관으로 보일 수 있다고 말하고 싶었습니다 . 일반적으로 선호되는 방법은 create()엔터티가 이미 존재한다는 특정 예외 또는 반환 코드 를 호출 하고 처리하는 것입니다. 이것은 물론 실제 질문에 대한 답변이 아닙니다 (이것은 주석 일뿐입니다).
julealgon

답변:


61

부울 메소드는 항상 부정적인 형태로만 사용될 때에도 항상 긍정적 인 형태를 취해야합니까?

그런 것들에 대한 규칙을 만드는 것은 조금처럼 보입니다. 코딩 표준 문서 에서 부울 속성에 음수 이름을 사용해서는 안된다는 지침을보고 싶지 않습니다 . 그러나 개인적인 스타일의 문제로, 이름을 긍정적으로 유지하려고 노력하는 것이 좋은 이상이라고 생각합니다. 그러나 나는 그 마른 체형과 쉽게 놓칠 필요가없는 것을 피하는 것이 좋다고 생각합니다 !. 종종 부정적인 이름을 긍정적 인 이름으로 바꾸는 방법을 찾을 수 있습니다.

  • accountHasCharges
  • accountIsClear(와 동일 !accountHasCharges)

명확성은 가장 중요한 고려 사항이며 부정적인 분석법 이름을 피해야하는 좋은 이유는 이중 부정을 유발하거나 악화시킬 수 있기 때문입니다.

  • isComplete // 괜찮아
  • isNotComplete //! isComplete가 일반적으로 더 좋습니다
  • isIncomplete // '불완전'이 객체의 알려진 상태이면 의미가있을 수 있습니다.
  • !isNotComplete // 끔찍한
  • !isNotComplete == 0 // 영구적 인 휴가로 이어질 수 있습니다

5
" 부울 속성에 음수 이름을 사용하지 말아야 한다는 코딩 표준 문서의 지침을보고 싶지 않습니다 ." - 그냥 여기에 두겠습니다 ...
AakashM

16
당신은 잊었다!isNotIncomplete
벤 리

그래서의 반대는 할 entity_existsentity_should_be_created(대신 entity_not_exists)? 아니면 아마도 entity_missingDan의 제안에 따라?
ADTC

1
이것은 코딩 표준 문서가 "해야한다"또는 "필수"보다는 "선호"라는 단어를 사용할 수있는 곳입니다.
Wayne Conrad

15

나는 긍정적 인 말을 읽기가 더 쉽다는 데 동의합니다. 당신은 시도 할 수 있습니다

세번째 형태

int entity_id = 42;
if (entity_is_missing(entity_id)) create_entity(entity_id);

또는

네 번째 양식

int entity_id = 42;
if (is_entity_missing(entity_id)) create_entity(entity_id);

2

또한 방법이 어떻게 사용되는지에 달려 있습니다. 긍정적이고 부정적인 경우 모두에 사용될 예정이라면

if (!entity_exists(entity_id)) create_entity(entity_id);

if (entity_exists(entity_id)) publish_entity(entity_id);

그런 다음 위와 같이 메소드 이름이 긍정이어야합니다. 어떻게 사용 될지 잘 모르겠다면 위의 내용을 고수하십시오.

그러나 부정적인 경우 에만 사용되는 경우 다음이 허용됩니다 (아마도 바람직 할 수 있음)

if (entity_not_exists(entity_id)) create_entity(entity_id);

더 긍정적 인 말로

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