Правила оформления исходного кода в Паскаль (форматирование отступами) [Pascal]

В этом разделе мы поговорим о том как форматировать исходный код программы на языке Паскаль.

Смысл форматирования кода состоит в том, что увеличить его читаемость, то есть понятность для программиста.

Блоковые конструкции

В Паскаль можно выделить как минимум $6$ блоковых конструкций -- то есть таких, для окружения тела которых нужны операторные скобки, а именно:

Смысл блока состоит в том, что в него как бы можно вложить одно или более действий -- обычно, когда действий несколько используют операторные скобки (кроме конструкции repeat/until, где операторные скобки не нужны).

Один блок может вкладываться в другой бесконечное число раз по принципу матрёшки:
кложенные блоки в паскаль правила оормления форматирования

Главная идея форматирования

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

Единичный отступ предлагается брать любым, но достаточно заметным, хотя бы 2 пробела. Мы возьмём в качестве единичного отсут в 4 пробела (т.н. "один Tab"). Тогда:

  • для тела программы все операторы будут сдвинуты на 4 пробела, например:
    var a:integer;
    begin   // нулевой отступ
        a := 2;           // одинарные отступ
        a := 3 + 5;    // одинарные отступ
    end;

    -- для операторных скобок и слова var обычно используют нулевой отступ -- то есть вообще не добавляют пробелов слева.

  • Любой блок внутри тела программы для своих операторов уже нуждается в 2 двух отступах, например оператор ветвления (неполная форма, одно действие в ветке):
    var a:integer;
    begin
        a := 2;           // одинарные отступ
        if (a > 2) then    // одинарные отступ
            a := 3 + 5;    // двойной отступ для блока ветки then
    end;

    -- здесь присваивание и сам условный опертор лежат на одном уровне в теле программы и потому у них равные отступы, а вот операция

    a := 3 + 5;

    уже вложена в ветку $then$ и потому ей требуется $+1$ относительно отступов родительской операции (в данном случае для $if..then$ был один отступ, а потому для ветки $then$ требуется $1+1=2$ -- т.е. двойной отступ.)

  • Если условный оператор IF находится в полной форме, то отступы могут выглядеть так (по одной операции в каждой ветке):
    var a:integer;
    begin
        a := 2;           // одинарные отступ
        if (a > 2) then    // одинарные отступ
            a := 3 + 5    // двойной отступ для блока ветки then
        else 
            a := b + 5;  // двойной отступ оператора в ветке else
        b := 2; { -- независимый от if оператор,
      находится на том же уровне, что и сам if }
    end;
  • Если мы используем операторные скобки для того, чтобы отнести к блоку оператора более одного одно действия, то форматировать код можно так:
    var a:integer;
    begin
        a := 2;           // одинарные отступ
        if (a > 2) then    // начало блока then
            a := 3 + 5   
        else begin  // конец then и начало блока ветки else
            a := b + 5; 
            b := 2;
        end; // конец блока ветки else
    end;

    -- в последнем примере в ветке else (ветка ложности оператора if) содержит два оператора, а птому фигурные скобки нужны.

  • Также приведём пример оформления блока цикла с вложенным условием:
    var i:integer;
    begin
        for i:=1 to15 do
        begin
            if (i > 5) then
            begin 
                write(i, ' ');
                write('@');
            end else
                write('# ');
        end;
    end;