Ни
для кого не является секретом тот факт, что качество оформления исходных текcтов,
имеет важное значение, хотя, на первый взгляд, не оказывает прямого влияния на
качество окончательного программного продукта. На самом деле четкое следование
определенному стилю оформления позволяет значительно снизить усилия,
затрачиваемые на создание, отладку и, в особенности, сопровождение программы.
Никаких
официальных руководств по оформлению исходных текстов на Delphi
я не встречал, поэтому в своем изложении буду опираться на стандарты де-факто,
установленные компанией Borland/Inprise,
которые можно изучить, просматривая исходные тексты модулей и примеров,
поставляемых с Delphi.
Самым
главным требованием необходимо считать четкое отражение вложенности операторов
в сдвигах начала строки от левой границы. Стандартным считается отступ на 2
символа для каждого следующего вложения:
первый уровень
второй уровень
третий уровень
Это
требование должно выполняться одинаково как для составных (с begin и end), так и для простых
операторов:
В
тех случаях, когда длина простого оператора невелика, он может записываться на
одной строке с оператором более высокого уровня:
for i:=StartValue to EndValue do Action;
Операторные
"скобки" begin и end
записываются на уровне порождающего их оператора и не влияют на отступы
вложенных операторов. Необходимо четко следить, чтобы парные begin-end находились на одном уровне. Самое
простой способ избежать ошибок, связанных с их установкой: устанавливать их
одновременно.
При
переносе частей длинного простого оператора производится сдвиг переносимых
частей на следующий уровень:
Блоки
обработки исключений записываются по тем же правилам, что и обычные блоки begin-end:
with TSomeObject.Create do
try
Update;
finally
Free;
Правила
вложенности распространяются также на объявления типов, переменных, констант и
вложенные функции и процедуры:
Названия
разделов объявления классов записываются на том же уровне, что и само
объявление (напоминаю, что раздел по умолчанию - published):
Комментарии
записываются перед комментируемым оператором на его уровне:
// комментарий оператора 1
Operator1;
for i:=StartValue to EndValue do
{ комментарий
оператора Action }
Action;
Короткие
комментарии коротких операторов могут записываться в конце строки:
Inc(X,2); // увеличиваем значение
на 2
Зарезервированные
слова пишутся только строчными буквами:
IF ... THEN ... ELSE // неправильно
If ... Then ... Else // неправильно
if ... then ... else // правильно
В
качестве идентификаторов рекомендуется использовать английские слова, избегая
при этом транслитерации русских терминов (не поленитесь заглянуть в
русско-английский словарь - это полезно во всех отношениях):
var
KolStran:
Integer; // не рекомендуется
PageCount:
Integer; // рекомендуется
Идентификаторы
должны начинаться с прописных букв (исключая идентификаторы, начинающиеся с
префиксов - в таких идентификаторах префиксы пишутся строчными буквами, а
прописной буквой выделяется собственно идентификатор). В том случае, если
название идентификатора составлено из нескольких слов, каждое слово выделяется
прописной буквой:
var
Variable: Integer;
PenColor: TColor;
procedure UpdatePageCount;
type
TPageState = (psUnknown,psOpen,psClose); // исключение - использование префиксов
Настоятельно не
рекомендуется использование бессмысленных идентификаторов:
var
A1,AAA,VAR1: Integer; // не рекомендуется
Частым
исключением являются традиционные идентификаторы цикловых переменных: i,j,k и так далее. Но и их использование должно быть
сокращено до минимума. Вместо них, где это возможно, должны использоваться
осмысленно названные переменные:
const
TestSize
= 10;
var
i,Page,Control:
Integer;
TestArray:
array[0..TestSize] of Boolean;
begin
for i:=0 to TestSize do TestArray:=Odd(i); // можно использовать i
// рекомендуется
использовать именованную переменную
for Page:=1 to Pred(PageCount) do ProcessPage(Page);
for Control:=0 to Pred(ControlCount) do
Controls[Control].Free;
end;
Относительно
разделения пробелами частей операторов, параметров процедур и функций и так
далее единого мнения нет. Очевидно, что некоторое увеличение объема текста,
длины строк, большая трудоемкость, в том числе при повторном редактировании
мешают прижиться стандартному стилю Borland Delphi. Ниже приведены несколько вариантов оформления,
начиная с очень разреженного, заимствованного из C-текстов, и кончая сверхплотным, не использующим никаких дополнительных
пробелов:
// нечто подобное можно увидеть в C-текстах от Borland
// так получается менее трудоемко и, в некоторых случаях,
более читаемо -
// так предпочитаю делать я
При
выборе идентификаторов необходимо придерживаться основных правил именования,
которые гласят, что к идентификатору типа должна добавляться буква T, имена
private-полей должны иметь впереди F, а имена методов доступа к ним должны
начинаться на Set и Get:
В так называемых enumerated-типах, как правило, используются
константы, начинающиеся с двухбуквенных или трехбуквенных префиксов, отражающих,
в сокращенном виде, название типа:
Константы
WinAPI, как правило, пишутся прописными буквами, что,
во-первых, выделяет их в тексте, и, во-вторых, соответствует их написанию в
справочной системе и экспортирующих модулях:
В
начале каждого файла рекомендуется помещать информационный комментарий.
Составьте себе шаблон этого комментария, сохраните в PAS-файле и пользуйтесь
операцией загрузки блока в Delphi IDE (Ctrl+Q R) для его установки в начало каждого файла. Такие
комментарии обычно содержат информацию о модуле и авторских правах:
материал взят с www.somecompany.com