가독성 관점에서 볼 때 부울 메서드에 대해 어떤 메서드 이름을 선호합니까?
public boolean isUserExist(...)
또는:
public boolean doesUserExist(...)
또는:
public boolean userExists(...)
getUserExistence
, userIsNotExtinct
, userHasExistentialState
등 ...
가독성 관점에서 볼 때 부울 메서드에 대해 어떤 메서드 이름을 선호합니까?
public boolean isUserExist(...)
또는:
public boolean doesUserExist(...)
또는:
public boolean userExists(...)
getUserExistence
, userIsNotExtinct
, userHasExistentialState
등 ...
답변:
public boolean userExists(...)
내가 선호하는 것입니다. 조건부 검사를 자연 영어와 훨씬 더 비슷하게 만듭니다.
if userExists ...
하지만 딱딱하고 빠른 규칙은 없다고 생각합니다.
if
무엇입니까? 부작용이 있다면 그것은 훨씬 더 냄새입니다. if IsUserExisting()
그리고 if DoesUserExist()
끔찍한 보이는 피해야한다.
userExists
되었으므로 선언 할 변수의 이름은 무엇입니까? userExists
메소드가 아닌 변수에 좋습니다. @Oskar가 썼 듯이-그것은 질문이 아니라 진술처럼 들립니다.
가독성 을 추구하는 동안 명확성 을 희생하지 않도록주의하십시오 .
하지만 if (user.ExistsInDatabase(db))
보다 더 좋은 읽고 if (user.CheckExistsInDatabase(db))
, 빌더 패턴 (또는 당신의 상태를 설정할 수있는 클래스)와 클래스의 경우를 고려 :
user.WithName("Mike").ExistsInDatabase(db).ExistsInDatabase(db2).Build();
그것이 ExistsInDatabase
존재하는지 확인하거나 존재한다는 사실을 설정하는지 여부는 명확 하지 않습니다. 비교 값을 쓰지 if (user.Age())
않거나 전혀 쓰지 않을 것입니다. if (user.Name())
왜 if (user.Exists())
순전히 그 속성 / 함수가 부울 유형이고 자연 영어처럼 읽을 수 있도록 함수 / 속성의 이름을 바꿀 수 있기 때문에 왜 좋은 생각입니까? 부울 이외의 다른 유형에 사용하는 것과 동일한 패턴을 따르는 것이 그렇게 나쁜가요?
다른 유형의 경우 if
명령문은 함수의 반환 값을 코드의 값과 비교하므로 코드는 다음과 같습니다.
if (user.GetAge() >= 18) ...
"if user dot get age is greater than or equal to 18 ..."로 읽습니다. 사실- "자연 영어"가 object.verb
아닙니다. 많은 주류 언어). 프로그래머는 일반적으로 위의 진술을 이해하는 데 문제가 없습니다. 그럼 다음이 더 나빠질까요?
if (user.CheckExists() == true)
일반적으로 단축됩니다
if (user.CheckExists())
치명적인 단계에 이어
if (user.Exists())
"코드가 쓰여진 것보다 10 배 더 자주 읽힌다"는 말이 있지만, 버그를 쉽게 발견 할 수있는 것도 매우 중요합니다. 객체가 존재하도록하고 성공에 따라 true / false를 반환하는 Exists ()라는 함수가 있다고 가정합니다. 코드를 쉽게 볼 수 있고 if (user.Exists())
버그를 발견하지 못할 수 있습니다 if (user.SetExists())
. 예를 들어 코드를 읽으면 버그가 훨씬 더 분명해질 것 입니다.
또한 user.Exists ()는 복잡하거나 비효율적 인 코드를 쉽게 포함 할 수 있으며 데이터베이스를 왕복하여 무언가를 확인할 수 있습니다. user.CheckExists ()는 함수가 어떤 일을한다는 것을 분명히합니다.
여기에서 모든 응답을 참조하십시오. 명명 규칙 : 부울을 반환하는 메서드의 이름은 무엇입니까?
마지막으로 "Tell Do n't Ask"에 이어 참 / 거짓을 반환하는 많은 함수가 어쨌든 사라지고 객체에 상태를 묻는 대신 무언가를하도록 지시합니다. 상태에 따라 방법.
Suppose you had a function called Exists() which causes the object to exist
그것은 이미 문제입니다. 이러한 방법은와 같은 동사 여야합니다 Create
. 최소한 Exist
이지만 동사로 "exist"는 거의 사용되지 않습니다. It's not clear if ExistsInDatabase is checking whether it does exist, or setting the fact that it does exist.
매우 명확합니다. 부울을 반환하는 것 이외의 다른 작업을 수행하면 대부분의 개발자가 놀랄 것이라고 주장합니다.
Most developers
는 문장의 핵심입니다. 나는 무언가가 존재하는지 확인하는 것 외에 다른 것이 all developers
있다면 놀랄 것이라고 말할 것 CheckExists()
입니다. 그것은이 아니라 Exists()
그냥, 끔찍한 이름 CheckExists()
A는 더 나은 이름, 그리고이 질문은 일반적인 원칙, 무슨 최고의 명명 패턴으로, 요구하고있다? 대답은 다른 함수처럼 취급하고, 이름을 동사로 시작하고, 부울을 반환하기 때문에 다른 패턴을 사용하지 않는 것입니다.
1) 자연어에서 의미가 있고 2) 내가 본 API의 규칙을 따르기 때문에 userExists ()를 사용합니다.
자연어로 이해되는지 확인하려면 소리내어 읽으십시오. "사용자가있는 경우"는 "사용자가있는 경우"또는 "사용자가있는 경우"보다 유효한 영어 구문처럼 들립니다. "사용자가있는 경우"가 더 나을 수 있지만 "the"는 아마도 메서드 이름에 불필요합니다.
Java SE 6에 파일이 있는지 확인하려면 File.exists ()를 사용 합니다. 이것은 버전 7 에서 동일하게 보입니다 . C #을 사용하여 같은 규칙 으로 수행 파이썬 과 루비를 . 바라건대, 이것은 이것을 언어에 구애받지 않는 대답이라고 부르기에 충분히 다양한 컬렉션입니다. 일반적으로 나는 당신의 언어 API를 유지하기 위해 이름 지정 방법을 선호합니다.
여기에 몇 가지 다른 답변에서 놓친 것으로 생각되는 사항이 있습니다.
이것이 C ++ 클래스 메서드인지 C 함수인지에 따라 다릅니다. 이것이 메소드라면 호출 if (user.exists()) { ... }
되거나 호출 if (user.isExisting()) { ... }
되지 않을 것 if (user_exists(&user))
입니다. 이것이 상태 bool 메서드가 객체 앞에있을 때 문장처럼 읽히기 때문에 상태 bool 메서드가 동사로 시작해야하는 코딩 표준 뒤에있는 이유입니다.
불행히도 많은 오래된 C 함수는 성공에 대해 0을 반환하고 실패에 대해 0이 아닌 값을 반환하므로 모든 bool 함수가 동사로 시작하거나 항상 true와 비교하지 않는 한 사용되는 스타일을 결정하기 어려울 수 있습니다. if (true == user_exists(&user))
순전히 주관적입니다.
나는 userExists(...)
다음과 같은 진술이 더 잘 읽기 때문에 선호합니다 .
if ( userExists( ... ) )
또는
while ( userExists( ... ) )
isBabbyFormed