Пустые строки могут повысить читабельность путем группирования секций кода, которые логически связаны между собой. Пустые строки должны использоваться в следующих местах:
Язык Delphi является очень легким для понимания языком, поэтому нет особой необходимости в использовании большого количества пробелов. Стандартный отступ составляет два пробела.
Примеры правильного использования:
function TMyClass.MyFunc(var Value: Integer); MyPointer := @MyRecord; MyClass := TMyClass(MyPointer); MyInteger := MyIntegerArray[5]; |
Примеры неправильного использования:
function TMyClass.MyFunc( var Value: Integer ) ; MyPointer := @ MyRecord; MyClass := TMyClass ( MyPointer ) ; MyInteger := MyIntegerArray [ 5 ] ; |
Всегда необходимо использовать два пробела для всех уровней отступа. Другими словами, первый уровень отступает на два пробела, второй на четыре и так далее. Использование символов табуляции исключается, поскольку они усложняют просмотр и печать текста.
Существует несколько исключений из этого правила. Зарезервированные слова unit, uses, type, interface, implementation, initialization и finalization всегда должны примыкать к левой границе. Также должны быть отформатированы финальный end и end, завершающий исходный модуль. В файле проекта выравнивание по левой границе применяется к словам program, главным begin и end. Код внутри блока begin..end должен иметь стандартный отступ два символа.
Все строки должны быть ограничены 80 столбцами. Строки длиннее, чем 80 столбцов должны быть разделены и перенесены. Все перенесенные строки должны быть выровнены по первой строке и иметь отступ в два символа. Выражение begin всегда должно находиться на своей отдельной строке.
Пример:
Правильно
function CreateWindowEx(dwExStyle: DWORD; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND; stdcall; |
Никогда не разрывайте строку между параметром и его типом, кроме параметров, перечисляемых через запятую. Двоеточие для всех объявлений переменных не должно содержать перед собой пробелов и иметь один пробел после перед именем типа.
Правильно
procedure Foo(Param1: Integer; Param2: Integer); |
Неправильно
procedure Foo( Param :Integer; Param2:Integer ); |
Нельзя переносить строки в тех местах, где не допускаются пробелы, например между именем метода и открывающей скобкой или между именем массива и открывающей квадратной скобкой. Никогда нельзя помещать выражение begin на строку, содержащую другой код.
Неправильно
while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse; end; |
Правильно
while (LongExpression1 or LongExpression2) do begin // DoSomething // DoSomethingElse; end; if (LongExpression1) or (LongExpression2) or (LongExpression3) then |
Для более простого понимания логики выражений следует начинать строку с логического оператора, а не заканчивать с него:
if (LongExpression1) or (LongExpression2) or (LongExpression3) then |
В сложных конструкциях рекомендуется выравнивать скобки на одном уровне:
if ((LongExpression11) and (LongExpression12)) or ((LongExpression21) or (LongExpression22)) then |
Либо "раскрывать скобки" подобным образом:
if (
(LongExpression11)
and (LongExpression12)
)
or
(
(LongExpression21)
or (LongExpression22)
) then
|
Локальные функции и процедуры должны иметь стандартный отступ в два пробела вправо от их владельца и сама процедура должна выделяться пустыми строками по одной перед и после локальной процедуры.
Если "внешняя" процедура имеет локальные переменные, то они должны декларироваться в два этапа: вначале декларируются все переменные, доступные локальным процедурам – перед ними, далее перед телом "внешней" процедуры декларируются переменные, доступные только ей.
В том случае, если внешняя и все локальные процедуры достаточно просты, допускается, декларирование переменных перед локальной процедурой, независимо от того, будет ли в локальных процедурах осуществляться доступ к ним или нет.
procedure SomeProcedure;
var
I: Integer;
procedure LocalProcedure1;
begin
...
I := I + 1;
...
end;
procedure LocalProcedure2;
begin
...
end;
var
J: Integer;
begin
...
LocalProcedure1;
J := J + 3;
I := I + 2;
...
LocalProcedure2;
...
end;
|
Copyright © 2004 Вячеслав Колдовский Специально для Delphi Plus