Чистый код. Создание, анализ и рефакторинг (Мартин) - страница 74

>  public FitNesseServer(FitNesseContext context) {

>    this.context = context;

>  }


>  public void serve(Socket s) {

>    serve(s, 10000);

>  }


>  public void serve(Socket s, long requestTimeout) {

>    try {

>      FitNesseExpediter sender = new FitNesseExpediter(s, context);

>      sender.setRequestParsingTimeLimit(requestTimeout);

>      sender.start();

>    }

>    catch (Exception e) {

>      e.printStackTrace();

>    }

>  }

>}

Наше зрение быстро охватывает структуру файла с отступами. Мы почти мгновенно находим переменные, конструкторы и методы. Всего за несколько секунд можно понять, что класс предоставляет простой интерфейс для работы с сокетом, с поддержкой тайм-аута. С другой стороны, разобраться в версии без отступов без тщательного анализа практически невозможно.

Нарушения отступов. Иногда возникает соблазн нарушить правила расстановки отступов в коротких командах if, коротких циклах while или коротких функциях. Но каждый раз, когда я поддавался этому искушению, я почти всегда возвращался и расставлял отступы, как положено. Таким образом, я стараюсь не сворачивать блоки в одну строку, как в этом фрагменте:

>public class CommentWidget extends TextWidget

>{

>  public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";


>  public CommentWidget(ParentWidget parent, String text){super(parent, text);}

>  public String render() throws Exception {return ""; }

>}

Вместо этого я предпочитаю развернутые блоки с правильными отступами:

>public class CommentWidget extends TextWidget {

>  public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";


>  public CommentWidget(ParentWidget parent, String text) {

>    super(parent, text);

>  }


>  public String render() throws Exception {

>    return "";

>  }

>}

Вырожденные области видимости

Иногда тело цикла while  или команды for не содержит команд, то есть является вырожденным, как в следующем фрагменте. Я не люблю такие структуры и стараюсь избегать их. А когда это невозможно, я по крайней мере слежу за тем, чтобы пустое тело имело правильные отступы и было заключено в фигурные скобки. Вы не представляете, как часто меня обманывала точка с запятой, молчаливо прячущаяся в конце цикла while в той же строке. Если не сделать эту точку хорошо заметной, разместив ее в отдельной строке, ее попросту слишком сложно разглядеть:

>while (dis.read(buf, 0, readBufferSize) != -1)

>  ;

Правила форматирования в группах


У каждого программиста есть свои любимые правила форматирования, но если он работает в группе, то должен руководствоваться групповыми правилами.

Группа разработчиков согласует единый стиль форматирования, который в дальнейшем применяется всеми участниками. Код программного продукта должен быть оформлен в едином стиле. Он не должен выглядеть так, словно был написан несколькими личностями, расходящимися во мнениях по поводу оформления.