> 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)
> ;
Правила форматирования в группах
У каждого программиста есть свои любимые правила форматирования, но если он работает в группе, то должен руководствоваться групповыми правилами.
Группа разработчиков согласует единый стиль форматирования, который в дальнейшем применяется всеми участниками. Код программного продукта должен быть оформлен в едином стиле. Он не должен выглядеть так, словно был написан несколькими личностями, расходящимися во мнениях по поводу оформления.