Clean Code 程式碼整潔之道 格式
阿新 • • 發佈:2018-11-14
程式碼整潔之道 第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; } }