0
点赞
收藏
分享

微信扫一扫

Clean Code 代码整洁之道 格式


代码整洁之道 第5章 格式 笔记

 

5.1 格式的目的

代码格式关乎沟通

 

5.2 垂直格式

5.2.1 像报纸学习

源文件最顶部应该给出高层次概念和算法,细节应该往下渐次展开。

5.2.2 概念间垂直方向上的分隔

不同的东西用空白隔开。

5.2.3 紧密相连的应该靠近

 

5.3 横向格式

每行的代码不要过宽,尽量不超过80个字符

5.3.1 水平方向上的分隔与靠近

一段简单的例子:

private void measureLine( String line) {

lineCount++;

int lineSize = line.length();

totalChars += lineSize;

lineWidthHistogram.addLine(lineSize, lineCount);

recordWidestLine(lineSize);

5.3.2 水平对齐

不必过分对齐。

5.3.3 缩进

类中的方法相对类缩进,方法的实现相对方法声明缩进

 

5.4 团队规则

 

5.5 一个范例

public class CodeAnalyzer implements JavaFileAnalysis {
private int lineCount;
private int maxLineWidth;
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;
}
}

 

举报

相关推荐

0 条评论