Всех начинающих программистов с самых первых страниц любого учебника учат хорошему стилю программирования. Для начала под этим подразумевают просто введение отступов внутри составных блоков операторов. Благодаря этому код становится легче читать. Однако обратимся к опытным программистам: а всё ли так просто на самом деле?
Так уж получилось издревле, что разбираться в коде сложно. Особенно в чужом. Для облегчения жизни были придуманы:
- подсветка синтаксиса
- сворачивание кода
- и др.
Кроме того, код делают «структурированным» — с отступами. Так хорошо на глаз отличимы уровни вложенности разных подпрограмм. Но и тут есть неудобство: что, если уровней вложенности пять или больше? Тогда у внутренних строчек будет не менее 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;
Непривычно, правда?