Формат исходного кода на Object Pascal

Материал из GedeminWiki
Версия от 19:03, 9 января 2017; SYSDBA (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Ниже приводятся требования к формату исходного кода, написанного на языке Object Pascal.

  • Зарезервированные слова (begin, end, while etc.) набираются строчными буквами.
  • Следующие символы и последовательности символов выделяются пробелами с двух сторон: + - * / := = < > <> >= <= Пример:
Value := A + 5 / 6;
  • Следующие символы выделяются пробелом справа: : ; , Пример:
Variable: Integer;
...
A := B + C; D := E * F;
MyFunc(A, B);
  • Следующие символы не выделяются пробелами: ( ) [] {} . ‘ # ^ (. .) (* *) $ .. Пример:
MyFunc(A, B);
A: array[1..100] of Integer;
T := P^;
I := $77;
  • Не рекомендуется набирать операторы if...then...else в одну строку. В случае использования вложенных структур if…then…else обязательно использование операторных скобок begin, end.
  • Стандартный отступ — 2 пробела.
  • Отступами выделяются:
    • Оператор после зарезервированных слов then, else, do, repeat.
if A > B then
  Result := A
else
  Result := B;
	
while A < 100 do
  Inc(A);
  • Составной оператор, причем сами операторные скобки begin, end отступами не выделяются;
if A > B then
begin
 B := A;
 Result := A;
end;
  • Объявление констант после зарезервированного слова const.
const
  MyConst = 777;
  • Объявление переменных после зарезервированного слова var.
var
  MyVar: Integer;
  • Объявление типов после зарезервированного слова type.
type
  MyType = 1..2;
  • Перечисление подключаемых модулей после зарезервированного слова uses.
uses
  FirstUnit, SecondUnit, ThirdUnit;
  • Вложенные (локальные) функции и процедуры относительно внешней функции или процедуры.
function MyFunc: Integer;
	  
  function LocalFunc: Integer;
  begin
    Result := 5;
  end;

  begin
    Result := LocalFunc;
  end;
  • При объявлении класса, секции следуют в следующем порядке: private, protected, public, published. Если секция пустая, т.е. не содержит объявлений методов, переменных или properties, то она не указывается в объявлении класса. Начало каждой секции (кроме первой) выделяется пустой строкой. В пределах одной секции объявления переменных, методов и properties отделяются друг от друга пустыми строками. Кроме этого пустые строки используются для выделения логических групп (конструктор и деструктор отделяются от других методов; переменные, хранящие значения properties отделяются от других переменных и т.п.). Реализация методов класса происходит в обратном порядке, т.е. сначала public методы, затем protected и private, причем в пределах одной секции реализация методов происходит в порядке их объявления. Пример:
 { declaration }
 
 type
   TMyClass = class
   private
     FVariable: Integer;
 
     function GetVariable: Integer;
     procedure SetVariable(AVariable: Integer);
 
     procedure DoIt;
 
   public
     constructor Create;
 
     property Variable: Integer read GetVariable write SetVariable;
   end;	
 
 { implementation }
 
   constructor TMyClass.Create;
   begin
     inherited Create;
     FVariable := 555;
   end;
 
   function TMyClass.GetVariable: Integer;
   begin
     Result := FVariable;
   end;
 
   procedure TMyClass.SetVariable(Avariable: Integer);
   begin
     FVariable := AVariable;
   end;
 
   procedure TMyClass.DoIt;
   begin
     { do something with variable }
   end;
  • При переносе длинной строки вторая, третья и все последующие части набираются с отступом относительно первой, причем операторы оставляются в конце предидущей строки:
 VeryLongIdentifier := FirstVariable /
   SecondVariable *
   (ThirdVariable + FourthVariable);
  • Комментарии должны быть написаны грамотным английским или русским языком.
  • Всегда использовать константы вместо непосредственных значений.
  • Составной оператор должен умещаться на один экран, т.е. быть не длиннее чем в 20-25 строк кода.
  • При работе с компонентом Notebook рекомендуется обращаться к страницам либо по именам, либо определить константы для обращения по индексам.
  • закрывающий end должен находиться на одном уровне с открывающим begin.

Пример отформатированного кода

  procedure _Ok;
  begin
    // перед проверкой надо убрать курсор с эдита
    // чтобы изменения занеслись в поле
    if ModalResult = mrCancel then
      SetFocusedControl(btnCancel)
    else
      SetFocusedControl(btnOk);
 
    if TestCorrect then
    begin
      if DlgModified then
      begin
        Post;
        ModalResult := MrOk;
      end else
      begin
        Cancel;
        ModalResult := MrCancel;
      end;
    end else
    begin
      ModalResult := mrNone;
 
      if sSubDialog in gdcObject.BaseState then
      begin
        MessageBox(Handle,
          'Возможно, поле, которое необходимо заполнить находится'#13#10 +
          'в нижележащем диалоговом окне. В этом случае, закройте текущее окно'#13#10 +
          'с помощью кнопки Отмена и введите корректную информацию.',
          'Внимание',
          MB_OK or MB_ICONINFORMATION);
      end;
    end;
  end;

См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты