P.5 ~ P.48
- 특정한 단어를 사용하라 Ex.) Get → Fetch, Download
- 보편적인 이름 사용을 피하라 Ex.) tmp, retval
- 변수명에 세부정보를 덧붙여라
- Scope가 넓으면 긴 이름을 사용하라
- 대문자나 밑줄 등을 의미있는 방식으로 활용하라
P.49 ~ P.60
- 경계를 포함하는 한계값을 다룰 때는 min과 max를 사용하라
- 경계를 포함하는 범위에는 first와 last를 사용하라
- 경계를 포함하고/배제하는 범위에는 begin과 end를 사용하라
- 불리언 값을 정할 때는 is나 has같은 단어를 같이 쓴다
P.61 ~ P.74
- 일관성과 간결성을 위해 줄바꿈을 재정렬하라
- 메소드를 활용하여 불규칙성을 정리하라
- 도움이 된다면 코드의 열을 맞춰라 → 열 정렬
- 의미 있는 순서를 선택하고 일관성있게 사용하라
- 선언문을 블록으로 구성하라
- 코드를 문단으로 쪼개라
P.75 ~ P.90
- 주석으로 설명하지 말아야 하는 것 : 코드에서 유추할 수 있는 내용, 설명 자체를 위한 설명을 달지 마라, 나쁜 함수/변수 이름에 주석을 달지 마라
⇒ 좋은 코드 > 나쁜 코드 + 좋은 주석
- 생각을 기록하라 :
⇒ TODO l 앞으로 해야할 일, FIXME | 오동작을 일으킨다고 알려진 코드, HACK | 아름답지 않은 해결책, XXX | 위험! 큰 문제가 발생할 수 있음
⇒ 상수값을 왜 그렇게 정했는지 이유를 설명하라
※ // 이런 제길, 이 리스트 안에 중복된 항목이 있으면 곤란해 지잖아!
// ⇒ XXX | 이 코드는 리스트 안에 있는 중복된 항목을 다루지 않는다. 그것까지 감안하면 예외처리가 너무 많을 것이기 때문이다
P.91 ~ P.100
* 주석은 높은 ‘공간 대 비율’을 갖춰야 한다.
- 코너케이스를 설명해 주는 입/출력 예를 사용하라
- 코드의 의도를 명시하라
- 표준화 등 많은 의미를 함축하는 단어로 주석을 간단하게 만들어라
P.101 ~ P.119
- 조건문에서 인수의 순서 : if (변화하는 값 ≤ 안정적인(고정적인) 값)
- if/else 블록 순서 : 긍정적이고, 쉽고 흥미로운 경우를 앞에 놓아라.
⇒ 분홍색 코끼리는 생각하지 마세요
- 삼항연산자(cond ? a : b), do/while 루프, goto는 가독성을 떨어뜨린다
- 선형적인 코드를 추구하라
P.120 ~ P.131
- 커다란 표현을 쪼개는 가장 쉬운 방법은 하위 표현을 담을 추가 변수(설명 변수)를 만드는 것이다
- 드모르간의 법칙 : not을 분배하고 and/or을 바꿔라
1) not (a or b) == (not a) and (not b)
2) not (a and b) == (not a) or (not b)
P.132 ~ P.150
* 변수와 가독성
- 변수 제거하기 : 임시, 중간결과, 흐름제어 역할의 변수는 제거하는 게 좋다
- 변수 범위 좁히기 : 전역 변수 피하기. 자바스크립트에서 변수를 항상 var와 함께 선언하고 변수의 범위를 함수 내부로 국한시키는 것이 좋다
- 값을 한 번만 할당하는 변수를 선호하라 (const 키워드 사용)
P.191 ~ P.222
* 코드베이스를 작게 유지하기
- 사용하지 않는 코드 제거하기
- 주변에 있는 라이브러리를 적극 활용하기
- 일반 프로그래머가 하루에 출시가능한shippable 코드는 평균 10줄 정도다
* 테스트와 가독성
- 각 테스트의 최상위 수준은 간결해야 한다.
- 테스트 실패시 버그 추적과 수정에 도움이 될 만한 에러메시지를 출력해야 한다
- 무엇이 테스트되는지 분명하게 드러나도록 테스트 함수에 충분한 설명이 포함된 이름을 부여하라
P.223 ~ P.242
* 예제 : 분/시간 카운터
- ConveyorQueue : 시스템이 허락하는 한도 내에서 무제한의 크기를 갖는 큐로서 옆으로 한 칸 움직일 우 있으며, 큐 안에 담긴 모든 항목의 총합을 관리한다
- TrailingBucketCounter : 시간의 흐름에 따라서 ConveyorQueue를 옆으로 한 칸 이동시키고, (현재 시간에 가장 가까운 최근) 시간 구간의 카운트를 저장한다
- MinuteHourCounter : TrailingBucketCounter 두 개를 보관한다. 하나는 1분, 다른 하나는 1시간에 대한 카운트용이다