뚜껑을 열었을 때 독자들이 코드가 깔끔하고, 일관적이며, 꼼꼼하다고 감탄하면 좋겠다.
질서 정연하다고 탄복하면 좋겠다. 모듈을 읽으며 두 눈이 휘둥그래 놀라면 좋겠다.
전문가가 짰다는 인상을 심어주면 좋겠다.
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위해 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.
코드 형식은 중요하다! 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 의무다.
오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높으나, 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다.
일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.
신문 기사처럼 작성하라
개념은 빈 행으로 분리하라
빈 행은 새로운 개념을 시작한다는 시각적 단서다.
일련의 행 묶음은 완결된 생각 하나를 표현한다. 생각 사이에는 빈 행을 넣어 분리해야 한다.
세로 밀집도는 연관성을 의미한다.
서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.
수직 거리
서로 밀접한 개념은 세로로 가까이 둬야 한다.
시스템을 이해할 때, 이 조각 저 조각이 어디에 있는지 찾고 기억하느라 시간과 노력을 소모하면 안 된다.
함수 호출 종속성은 아래 방향으로 유지한다.
호출 되는 함수를 호출 함수보다 나중에 배치하면 소스 코드 모듈이 고차원에서 저차원으로 자연스레 내려간다.
신문 기사와 마찬가지로 가장 중요한 개념을 가장 먼저 표현하고, 세세해질수록 나중에 배치한다.
→ 독자가 소스 파일에서 첫 함수 몇 개만 읽어도 개념을 파악하기 쉬워진다. 세세한 사항까지 파고들 필요가 없다.
짧은 행이 바람직하다.
가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.
private void measureLine(String line) {
int lineSize = line.length();
totalSize += lineSize;
lineWidthHistogram.addLine(lineSize, lineCount);
}
private static double determinant(double a, double b, double c) {
return b*b - 4*a*c;
}
연산자 우선순위를 강조하기 위해서도 공백을 사용한다.
곱셈은 우선순위가 가장 높기 때문에 공백이 없다.
항 사이에는 공백이 들어간다. 덧셈과 뺄셈은 우선순위가 곱셈보다 낮기 때문이다.
가로 정렬
선언문과 할당문의 정렬은 유용하지 못하다.
들여쓰기
들여쓰기한 파일은 구조가 한눈엔 들어온다.
때로는 간단한 if문, 짧은 while문, 짧은 함수에서 들여쓰기 규칙을 무시하고픈 유혹이 생긴다. 넣어야 한다.
때로는 빈 while문이나 빈 for문을 접한다. 끝에 세미콜론(;)은 새 행에다 제대로 들여써서 넣어준다.
한 소스 파일에서 봤던 형식이 다른 소스 파일에도 쓰이리라는 신뢰감을 독자에게 줘야 한다.
좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다. 스타일은 일관적이고 매끄러워야 한다.