Нестандартное выравнивание кода отступами

Всех начинающих программистов с самых первых страниц любого учебника учат хорошему стилю программирования. Для начала под этим подразумевают просто введение отступов внутри составных блоков операторов. Благодаря этому код становится легче читать. Однако обратимся к опытным программистам: а всё ли так просто на самом деле?

Так уж получилось издревле, что разбираться в коде сложно. Особенно в чужом. Для облегчения жизни были придуманы:

  • подсветка синтаксиса
  • сворачивание кода
  • и др.

Кроме того, код делают «структурированным» — с отступами. Так хорошо на глаз отличимы уровни вложенности разных подпрограмм. Но и тут есть неудобство: что, если уровней вложенности пять или больше? Тогда у внутренних строчек будет не менее 5 отступов в начале. Из-за этого:

  • снижается эффективная длина строки (нужна горизонтальная прокрутка)
  • возникают сложности при изменении уровня вложенности (вдруг вам пришлось пятый уровень обернуть в ещё один уровень и теперь все отступы придётся увеличить на один).

Как это решить? Во многих случаях — никак. Однако мы поговорим об одном случае, когда это можно — и легко! Но предупреждаю — непривычно.

У меня совсем недавно закончился проект, в котором было много уровней вложенности и, как это часто бывает, — самый вложенный был главным. То есть самым большим по коду. Работать неудобно, особенно обидно, что 2, 3-й и иногда другие уровни вложенности вообще состояли из одного begin в начале и одного-единственного end в конце.

Не вдаваясь в подробности рассуждений сразу предлагаю свой выход из этой ситуации: выделять отступами нужно не тот блок, который вкладываем, а тот, в который вкладываем. Тогда большая часть основного кода постоянно будет у левого края редактора и её не нужно будет прокручивать. Самые же ненужные и редко меняемые begin/end в «верхних» уровнях вложения могут быть даже за краем экрана. Жаль, что автоматически ни один редактор пока этого не поддерживает.

Повторю — именно самый важный для нас код должен быть у левого края, а редко изменяемые блоки пусть отходят за край.

Пример:

                         begin

                     if a = 0
                     then
                begin
             procedureMyStep(p1, p2, p3);

             if p3=constanta1
             then
        begin

    case GlovalVar of
0: Kill(proc1);
1: //большой код
2: //ещё один очень-очень большой код
3: //а здесь тоже большой код
    end;

        end;

                end;

                        end;

Непривычно, правда?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

× 8 = 64