qingrui li Составлено и аннотировано на основе Руководства по стилю Object Pascal Чарльза Калверта.
Примечание. Многие люди, использующие Delphi, не обращают внимания на стиль кодирования и часто пишут нестандартный код, что затрудняет его понимание другими и приводит к ошибкам. Я надеюсь, что эта статья сможет побудить большинство энтузиастов Delphi объединиться со стандартным стилем и вместе двигаться вперед.
В этой статье описывается стандартный стиль форматирования кода Delphi. Этот подстиль основан на соглашениях по кодированию, принятых командой разработчиков Delphi. Мы признаем, что многие популярные исходные коды используют стиль, отличный от нашего, но мы настоятельно рекомендуем использовать стиль Borland в сообществе общедоступных исходных кодов.
Delphi — красивый язык, и одно из его важнейших преимуществ — читабельность. Этот стандарт разработан для улучшения читаемости. Когда разработчики будут следовать этому стандарту, все разработчики получат выгоду от единообразного и читаемого стиля. Усилия по обеспечению соблюдения стандартов стиля могут повысить ценность исходных программ, особенно во время циклов отладки и обслуживания.
Стиль именования InfixCaps
Название, также называемое CamelCaps, состоит из нескольких слов, передающих значение. Первая буква каждого слова пишется с заглавной буквы, а остальные — со строчной.
Такие как: MyFile, IntToStr, Items.
Delphi не использует венгерскую нотацию и рекомендует осмысленные имена. Например, используйте AppName вместо lpszAppName, используйте Successful вместо bSuccess и используйте ClientRect вместо lPRectClientRect.
Именование исходного файла
Используйте форму InfixCaps. При транспиляции файла заголовка C/C++ используйте то же имя, что и исходный файл заголовка. Если вам нужно объединить несколько файлов заголовков в один модуль, используйте имя основного файла заголовка, например: WinBase.h, Windows.h объединяются в Windows.pas.
соглашение об именах
За исключением зарезервированных слов и слов-директив, которые написаны строчными буквами, другие идентификаторы используют стиль InfixCaps.
Примечание. Похоже, в последнее время наблюдается тенденция к использованию простых строчных букв или сокращений для локальных переменных и формальных параметров.
Исключением является то, что идентификаторы в транспилированных файлах заголовков сохраняют свой первоначальный стиль.
Имена типов начинаются с буквы T (первая буква типа).
В именах функций, процедур и методов используются глаголы или глагольные фразы, а в других идентификаторах используются существительные или именные фразы.
Члены данных класса начинаются с F (первая буква поля).
Членам перечислимого типа предшествует сокращение типа в нижнем регистре, обычно две буквы, например:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkДа, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
Функции, возвращающие логические значения, начинаются с Is, например: IsVisible, IsResizable.
Использование пустого пространства
Вставляйте пустые строки в соответствующих местах, чтобы разделить различные части кода, например, между объявлениями классов, реализациями функций и т. д.
Где использовать пробелы: справа от знаков препинания, по обе стороны от бинарных операторов.
Где не следует вставлять пробелы:
Правильный пример:
функция TMyClass.MyFunc(var Value: Integer);MyPointer:= @MyRecord;MyClass:= TMyClass(MyPointer);MyInteger:= MyIntegerArray[5];
Пример ошибки:
функция TMyClass.MyFunc(var Value: Integer);MyPointer:= @ MyRecord;MyClass:= TMyClass (MyPointer);MyInteger:= MyIntegerArray [5];
отступ
Следует использовать отступы в два пробела и не использовать символы табуляции.
Код между начальным...концом должен иметь отступ, а сам код начала...конца не должен иметь отступа.
Отступ в два пробела при продолжении строк
Правильный пример:
функция CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) или (Y = X) или (Z = P) или (F = J) thenbegin S := J;end;
while (LongExpression1 или LongExpression2) начать // DoSomething // DoSomethingElse;end;if (LongExpression1) или (LongExpression2) или (LongExpression3) then
добрый
Объявления классов организованы в следующем порядке
поле данных
метод
свойство
Иерархия доступа организована в следующем порядке, за исключением кода, автоматически создаваемого IDE.
Конструкторы и деструкторы объявляются перед объявлением метода. Поскольку TObject.Destroy является виртуальной функцией и TObject.Free вызывает Destroy, не используйте другие имена для деструктора. Конструктор может использовать имя, отличное от Create, но обычно лучше использовать Create.
пример:
TMyClass = класс (TObject) частный защищенный общедоступный опубликованный конец;
Данные следует объявлять только в частном разделе и начинать с F (первая буква поля).
тип TMyClass = класс (TObject) частный FMyData: Integer; функция GetData: Integer; процедура SetData (Значение: Integer); публичное опубликованное свойство MyData: Integer чтение GetData запись SetData;
Интерфейсы следуют тем же правилам