Формат исходного кода на Object Pascal
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 76: | Строка 76: | ||
* При объявлении класса, секции следуют в следующем порядке: private, protected, public, published. Если секция пустая, т.е. не содержит объявлений методов, переменных или properties, то она не указывается в объявлении класса. Начало каждой секции (кроме первой) выделяется пустой строкой. В пределах одной секции объявления переменных, методов и properties отделяются друг от друга пустыми строками. Кроме этого пустые строки используются для выделения логических групп (конструктор и деструктор отделяются от других методов; переменные, хранящие значения properties отделяются от других переменных и т.п.). Реализация методов класса происходит в обратном порядке, т.е. сначала public методы, затем protected и private, причем в пределах одной секции реализация методов происходит в порядке их объявления. Пример: | * При объявлении класса, секции следуют в следующем порядке: private, protected, public, published. Если секция пустая, т.е. не содержит объявлений методов, переменных или properties, то она не указывается в объявлении класса. Начало каждой секции (кроме первой) выделяется пустой строкой. В пределах одной секции объявления переменных, методов и properties отделяются друг от друга пустыми строками. Кроме этого пустые строки используются для выделения логических групп (конструктор и деструктор отделяются от других методов; переменные, хранящие значения properties отделяются от других переменных и т.п.). Реализация методов класса происходит в обратном порядке, т.е. сначала public методы, затем protected и private, причем в пределах одной секции реализация методов происходит в порядке их объявления. Пример: | ||
| + | <syntaxhighlight lang="Pascal"> | ||
{ declaration } | { declaration } | ||
| Строка 116: | Строка 117: | ||
{ do something with variable } | { do something with variable } | ||
end; | end; | ||
| + | </syntaxhighlight> | ||
* При переносе длинной строки вторая, третья и все последующие части набираются с отступом относительно первой, причем операторы оставляются в конце предидущей строки: | * При переносе длинной строки вторая, третья и все последующие части набираются с отступом относительно первой, причем операторы оставляются в конце предидущей строки: | ||
Текущая версия на 19:03, 9 января 2017
Ниже приводятся требования к формату исходного кода, написанного на языке 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;