- 전문 용어 선택
GetPage(url) 대신 FetchPage(url) 또는 DownloadPage(url) 사용
BinaryTree::Size() 대신 BinaryTree::Height(), BinaryTree::NodeCount(), 또는 BinaryTree::MemoryUsage()로 변경
Thread::Stop() 대신 Thread::Terminate() 또는 Thread::Suspend() 사용
- 표현력 있는 단어 선택
send → deliver, dispatch, announce, distribute, route find → search, extract, locate, recover start → launch, create, begin, open make → create, establish, build, generate, compose, add, construct
- tmp나 retval 같은 일반적인 이름 피하기
예시 1:
1 total += data[index] * data[index];
2
3 // 나쁜 예: "반환값" 외에 추가 정보 없음
4 return_value += data[index];
5
6 // 좋은 예: "제곱합" 의미 명확히 표현
7 sum_of_squares += data[index]; // 버그를 더 빨리 발견 가능
예시 2:
1 // tmp가 적절한 경우: 범위가 작고 임시 저장 용도
2 if (right < left) {
3 temp = right;
4 right = left;
5 left = temp;
6 }
7
8 // 범위가 작지만 임시 저장보다 사용자 정보에 초점
9 String user_data = user.name();
10 user_data += " " + user.phone_number();
11 user_data += " " + user.email();
12 ...
13 template.set("user_info", user_data);
14
15 // tmp가 정확하지 않으므로 _file 접미사 추가
16 temp_file = tempfile.NamedTemporaryFile()
17 ...
18 SaveData(temp_file, ...)
- 반복 변수 사용
일반적으로 i, j, iter, it은 인덱스와 반복 변수로 널리 사용됩니다. 의미가 일반적이지만 모두가 이해합니다.
그러나 더 적절한 이름이 필요한 경우도 있습니다:
// 나쁜 예
if (clubs[i].members[k] == users[j])
// 좋은 예: club_idx, members_idx, users_idx 사용
if (clubs[club_idx].members[user_idx] == members[member_idx]) // 버그! 첫 글자 불일치
tmp, retval 같은 일반적인 이름 사용은 신중해야 합니다. 몇 초 더 생각하여 더 나은 이름을 선택하면 명명 능력이 빠르게 향상됩니다.
- 구체적인 이름으로 추상적인 이름 대체
(1) 특정 TCP/IP 포트에서 서비스가 수신 가능한지 확인
IsServerReadyForPort()
// 더 구체적인 이름으로 변경
CanAcceptConnectionsOnPort()
(2) 복사 및 할당 생성자 비활성화
DISABLE_COPY_AND_ASSIGN
// 덜 과장되고 더 구체적인 이름으로 변경
#define DISABLE_COPY_AND_ASSIGN(ClassName) \
ClassName(const ClassName&); \
void operator=(const ClassName&);
// 사용 예시:
class MyClass {
private:
DISABLE_COPY_AND_ASSIGN(MyClass);
public:
...
};
(3) 명령줄 플래그
// 디버그 정보 출력; 실행 속도 감소하므로 주로 로컬에서 사용
--run_locally
// 두 개로 분리하여 더 명확하게
--verbose_logging 과 --local_database_only
(4) 이름에 더 많은 정보 추가
session_id; // 예: "af84ef845cd8"
// 변경
session_identifier_hex;
(5) 단위가 포함된 변수가 더 정확
start_time_ms // start보다 나음
delay_duration // delay보다 나음
file_size_mb // size보다 나음
max_transfer_rate // limit보다 나음
(6) 다른 속성 추가
unencrypted_password // password보다 나음
raw_text_comment // comment보다 나음
html_content_utf8 // html보다 나음
encoded_data // data보다 나음
- 이름 길이
(1) 작은 범위에서는 짧은 이름 사용 가능
(2) 팀 신입 구성원이 이름의 의미를 이해할 수 있는지 확인
eval은 evaluation, doc는 document, str은 string을 의미할 수 있습니다. 따라서 FormatStr()은 이해하기 쉽습니다.
BEManager는 BackEndManager로 작성해야 합니다. BE가 BackEnd를 의미한다는 것을 추측하기 어렵습니다.
- 불필요한 단어 제거
ConvertToString() → ToString() ExecuteServiceLoop() → ServiceLoop()
- 이름 형식으로 의미 전달
클래스명: 단어 첫 글자 대문자 CamelCase 변수명: 밑줄로 구분 lower_separated 상수 형식: kConstantName而不是CONSTANT_NAME (매크로 형식과 구분하기 위함)
통일된 클래스 멤버 변수 명명 규칙 사용, 예: member_ 접두사 사용