В начале работы над проектом FitNesse в 2002 году я провел встречу с группой для выработки общего стиля программирования. На это потребовалось около 10 минут. Мы решили, где будем расставлять фигурные скобки, каким будет размер отступов, по какой схеме будут присваиваться имена классов, переменных и методов и т.д. Затем эти правила были закодированы в системе форматирования кода нашей рабочей среды, и в дальнейшем мы неуклонно придерживались их. Это были не те правила, которые предпочитаю лично я; это были правила, выбранные группой. И я, как участник группы, неуклонно соблюдал их при написании кода в проекте FitNesse.
Хорошая программная система состоит из набора удобочитаемых документов, оформленных в едином, согласованном стиле. Читатель должен быть уверен в том, что форматные атрибуты, встречающиеся в одном исходном файле, будут иметь точно такой же смысл в других файлах. Ни в коем случае не усложняйте исходный код, допуская его оформление в нескольких разных стилях.
Правила форматирования от дядюшки Боба
Правила, которые использую лично я, очень просты; они представлены в коде листинга 5.6. Перед вами пример того, как сам код становится лучшим документом, описывающим стандарты кодирования.
Листинг 5.6. CodeAnalyzer.java
>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 findJavaFiles(File parentDirectory) {
> List files = new ArrayList();
> findJavaFiles(parentDirectory, files);
> return files;
> }
> private static void findJavaFiles(File parentDirectory, List 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;