Стандарт стилевого оформления исходного кода DELPHI - Дополнения

ОГЛАВЛЕНИЕ


Дополнения

В этой части собраны дополнения, которые не вошли в стандарт Borland. Эти дополнения взяты из правил JCL и опыта российских разработчиков.

Const, Var и Type

Зарезервированные слова var, const и type всегда пишутся на новой строке и не допускают появления на этой же строке какого-либо текста.

Правильно
type
TMyType = Integer;

const
MyConstant = 100;

var
MyVar: Integer;
Неправильно
type TMyType = Integer;

const MyConstant = 100;

var MyVar: Integer;

Процедуры должны иметь только по одной секции type, const и var в следующем порядке:

procedure SomeProcedure;
type
TMyType = Integer;
const
ArraySize = 100;
var
MyArray: array [1..ArraySize] of TMyType;
begin
...
end; 

Директивы условной компиляции

Все директивы условной компиляции должны быть собраны в одном модуле ХХX.INC. Этот файл предназначен для определения глобальных директив. Оператор include должен быть помещен между ключевыми словами unit и interface. Никто не может мождифицировать файл ХХX.INC по собственному желанию.

Строковые ресурсы

Все строковые ресурсы должны иметь вид "Rs"[Category][Name]. [Category] должно быть аббревиатурой или названием категории кода, где используется строка. [Name] должно быть именем строки ресурса. Например, конструктор TJclCriticalSectionEx.CreateEx вызывает исключительную ситуацию при ошибке инициализации. Сообщение об ошибке объявляется в глобальном модуле ХХXResources.pas с именем RsynchInitCriticalSection.

Все строки должны быть исключены из кода и заменены на константы. Исключением из этого правила являются строки, которые являются какими-либо командами или от них будет зависеть поведение экземпляров класса. Такие строки должны быть явно объявлены в каком-либо из методов класса.

Исключения

Все исключения должны начинаться с префикса EХХХ. Все исключения должны быть отнаследованны от класса ENхError. При возбуждении исключительной ситуации предпочтительным является ее создание с помощью метода CreateRes:

raise EХХХSomeException.CreateRes(@RsSomeResourceString); 

Категории и разделение алгоритмов

Обычно, содержимое каждого созданного модуля есть набор классов, функций и процедур, принадлежащих к одной категории. Например, ХХХLogin содержит все, что относится к идентификации и персонификации пользователя. Для ясного восприятия исходного кода следует придерживаться следующего правила: в интерфейсной части модуля каждая группа функций, относящихся к одной субкатегории должны отделяться от другой группы функций тремя строками шириной 80 столбцов с описанием субкатегории на второй строке:

1	
2 Информация о последней попытке идентификации
3
procedure GetLastUserName(var ZUser: string);
procedure GetLastDatabase(var ZDatabase: string);

В секции реализации каждая подкатегория или класс должен разделяться строкой, состоящей из символов равенства (=), закомментированных однострочным комментарием и пустой строкой перед и после группы функций:

//=================================================

procedure GetLastUserName(var ZUser: string);
begin
...
end;
procedure GetLastDatabase(var ZDatabase: string);
begin
...
end;

//==================================================

Каждая функция из одной группы или методы класса должны разделяться между собой строкой, состоящей из символов минуса (-), закомментированных однострочным комментарием и пустой строкой перед и после функции или метода:

//==================================================

procedure GetLastUserName(var ZUser: string);
begin
...
end;

//--------------------------------------------------

procedure GetLastDatabase(var ZDatabase: string);
begin
...
end;

//==================================================