개행
이 빠지면 가독성이 현저히 떨어진다.연관성
이란 한 개념을 이해하는데 다른 개념이 중요한 정도다.변수
는 처음으로 사용하기 직전에 선언하며 수직으로 가까운 곳에 위치해야 한다.비공개 함수
는 처음으로 호출한 직후에 정의해야 쉽게 눈에 띄어야 한다.인스턴스 변수
는 클래스 맨 처음에 선언한다.호출하는 함수
를 호출되는 함수보다 먼저 배치해야 자연스럽게 읽힌다.
public void checkAdmin() {
if (!isAdmin()) {
throw new BusinessException();
}
}
private boolean isAdmin() {
return Role.ADMIN == this.roleName;
}
private boolean isAdmin() {
return Role.ADMIN == this.roleName;
}
private boolean isManager() {
return Role.MANAGER == this.roleName;
}
들여쓰기 무시하기
# before
public String render() { return ""; }
# after
public String render() {
return "";
}
팀
에 속한다면 자신이 선호해야할 규칙은 바로 팀 규칙이다. 그래야 스타일이 일관적이고 매끄럽다.public class CodeAnalyzer implements JavaFileAnalysis {
private int lineCount;
private int maxLineWidth;
private int widestLineNumber;
private LineWidthHistogram lineWidthHistogram;
private int totalChars;
public CodeAnalyzer() {
lineWidthHistogram = new LineWidthHistogram();
}
public static List<File> findJavaFiles(File parentDirectory) {
List<File> files = new ArrayList<File>();
findJavaFiles(parentDirectory, files);
return files;
}
private static void findJavaFiles(File parentDirectory, List<File> files) {
for (File file : parentDirectory.listFiles()) {
if (file.getName().endsWith(".java"))
files.add(file);
else if (file.isDirectory())
findJavaFiles(file, files);
}
}
public void analyzeFile(File javaFile) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(javaFile));
String line;
while ((line = br.readLine()) != null)
measureLine(line);
}
private void measureLine(String line) {
lineCount++;
int lineSize = line.length();
totalChars += lineSize;
lineWidthHistogram.addLine(lineSize, lineCount);
recordWidestLine(lineSize);
}
private void recordWidestLine(int lineSize) {
if (lineSize > maxLineWidth) {
maxLineWidth = lineSize;
widestLineNumber = lineCount;
}
}
public int getLineCount() {
return lineCount;
}
public int getMaxLineWidth() {
return maxLineWidth;
}
public int getWidestLineNumber() {
return widestLineNumber;
}
public LineWidthHistogram getLineWidthHistogram() {
return lineWidthHistogram;
}
public double getMeanLineWidth() {
return (double)totalChars/lineCount;
}
public int getMedianLineWidth() {
Integer[] sortedWidths = getSortedWidths();
int cumulativeLineCount = 0;
for (int width : sortedWidths) {
cumulativeLineCount += lineCountForWidth(width);
if (cumulativeLineCount > lineCount/2)
return width;
}
throw new Error("Cannot get here");
}
private int lineCountForWidth(int width) {
return lineWidthHistogram.getLinesforWidth(width).size();
}
private Integer[] getSortedWidths() {
Set<Integer> widths = lineWidthHistogram.getWidths();
Integer[] sortedWidths = (widths.toArray(new Integer[0]));
Arrays.sort(sortedWidths);
return sortedWidths;
}
}