- •Хороший стиль программирования
- •1. Не забывайте о комментариях
- •Комментируйте описания переменных
- •Комментируйте логику программы
- •2. Понимание переменных - ключ к пониманию программы
- •Все переменные должны быть описаны
- •У каждой процедуры должна быть своя задача
- •Процедура не должна быть большой
- •4. Текст должен быть удобен для чтения
- •Выделяйте алгоритмическую структуру
- •Смещение означает подчинение
- •Сопровождайте описания комментариями
- •Тщательно выбирайте имена переменных
- •3. Разделяй и властвуй – Используйте процедуры
- •Не экономьте на пробелах
- •Соглашение об именованиях – венгерская нотация
- •2.1. Именование модулей
- •2.2. Именование форм и модулей данных
- •2.3. Именование классов и интерфейсов
- •2.4. Именование полей
- •2.5. Именование методов
- •2.6. Именование переменных
- •2.7. Нотация (префиксы) для именования переменных (экземпляров объектов) в зависимости от типа
- •2.8. Именование глобальных констант
- •2.9. Зарезервированные слова
- •2.10. Объявление типов и экземпляры переменных определенных типов
- •2.11. Перечислимые типы
- •2.12. Строковые ресурсы
- •2.13. Исключения
2.5. Именование методов
При именовании полей всегда необходимо использовать стиль InfixCaps. Не допускается использование символов подчеркивания для разделения слов. В имени метода всегда должна содержаться команда к действию или глагольная фраза
Правильно: ShowStatus DrawCircle AddLayoutComponent
Неправильно: MouseButton (Существительное, не описывает функцию) drawCircle (Начинается с маленькой буквы) add_layout_component (Используются символы подчерка) ServerRunning (Глагольная фраза, но без команды)
Обратите внимание на последний пример (ServerRunning) - непонятно, что делает этот метод. Этот метод может использоваться для запуска сервера (лучше StartServer) или для проверки работы сервера (лучше IsServerRunning).
Методы для установки или получения значений свойств должны именоваться Get+имя свойства и -Set+имя свойства.
Например: GetHeight, SetHeigh
Методы для теста/проверки булевских свойств класса должны именоваться с префиксом Is+имя свойства.
Например: IsResizable, IsVisible
Для создания пар операций рекомендуется использовать следующие префиксы.
Init / Term - инициализация и завершения модуля
Create/Destroy - создание и удаление объекта
Start/Stop - начало/завершение какого либо процесса
Load/Save - загрузка/выгрузка чего либо
Get/Set - чтение/установка чего либо...
Не допускается смешивание функций из разных пар (например Get/Save – это неправильно).
2.6. Именование переменных
Имена всех локальных переменных должны подчиняться тем же правилам, которые установлены для именования полей, исключая префикс F.
Переменные, содержащие двоичные значения (флаги) могут именоваться либо с префиксом Is+имя свойства, либо с префиксом Flg+имя свойства, не рекомендуется использовать префикс "not", выражающий отрицание, всегда следует в таком случае заменять его на "Is", т.е. не использовать "NotFound", лучше "IsFound".
Рекомендуется использовать префикс "N" если переменная представляет количество чего-либо, например NItems; если переменная представляет номер, то окончание "No", например "RecordNo".
2.7. Нотация (префиксы) для именования переменных (экземпляров объектов) в зависимости от типа
В целом, стандарты Borland не рекомендуют использование префиксов для обозначения типа в имени переменной. Имя должно быть выбрано таким образом, чтобы определить функциональную принадлежность переменной. При использовании InFixCaps допускается составление имен переменных таким образом, чтобы начальная часть имени переменной указывала на ее функциональное назначение, а завершающая (постфикс) часть содержала указание на тип. Например: DateEdit,CustomerQuery, ErrorList.
Однако опыт разработки свидетельствует, что использование префиксов для именования переменных является эффективным способом стандартизации кода и очень распространено программистами, в том числе, и работающими с Borland Delphi.
Поэтому настоящие стандарты нейтрально относятся к обязыванию/запрету использования нотации (префиксов) для определения типов в имени переменных и программист, либо работающая над проектом группа, обязаны самостоятельно решать, использовать их или нет.
Смешивание различных стилей именования переменных в одном участке кода допускается, хотя и настоятельно не рекомендуется.
В том случае, если принято решение использовать префиксы, то для именования переменных (за исключением локальных переменных в простых процедурах и функциях) рекомендуется использовать запись с использованием нотации, построенной по следующему правилу:
Удалите из имени компонента префикс Т. Например, TButton превращается в Button.
Из полученного значения удалите все гласные буквы, за исключением первых букв слова. Например, Button превращается в bttn, a Edit превращается в edt.
Удалите сдвоенные согласные буквы. Например, bttn превращается в btn.
Если в результате возникает конфликт имен, возвращайте в полученное промежуточное значение гласные буквы— по одной, слева направо. Например, если появится новый компонент TBatton, его префикс типа войдет в конфликт с префиксом типа компонента TButton. Следовательно, для нового компонента следует установить префикс типа batn.
Типичный набор префиксов, рекомендуемых для использования, в случае именования переменных с применением нотации, представлен в таблице.
Префикс |
Тип |
Стандартные типы |
|
i |
Integer |
b |
byte |
bl |
boolean |
ch |
char |
s, str |
string |
f |
Double,Float, real |
w |
word |
ptr |
pointer |
arr |
array |
rec |
record |
set |
set of .. |
enum |
enumeration |
dtm |
TDateTime |
sl |
TStringList |
Стандартные компоненты |
|
fm |
TForm |
mm |
TMainMenu |
pm |
TPopupMenu |
mi |
TMenuItem |
pmi |
TPopupMenuItem |
lbl |
TLabel |
edt |
TEdit |
mem |
TMemo |
btn |
TButton |
cb |
TCheckBox |
rb |
TRadioButton |
lb |
TListBox |
cbb |
TComboBox |
gb |
TGroupBox |
rg |
TRadioGroup |
pnl |
TPanel |
cl |
TCommandList |
me |
TMaskEdit |
dg |
TDrawGrid |
img |
TImage |
sbx |
TScrollBox |
clb |
TCheckListBox |
spl |
TSplitter |
actl |
TActionList |
act |
TAction |
fnt |
TFont |
cht |
TChart |
Win32 |
|
pgc |
TPageControl |
ts |
TTabSheet |
il |
TImageList |
re |
TRichEdit |
tv |
TTreeView |
lv |
TListView |
hdr |
THeaderControl |
stb |
TStatusBar |
tlb |
TToolBar |
tbb |
TToolButton |
Системные компоненты |
|
tm |
TTimer |
Компоненты доступа к данным |
|
tbl |
TTable |
qr |
TQuery |
sp |
TStoredProc |
db |
TDataBase, TIBDataBase |
cr |
TCursor |
tr |
TTransaction |
conn |
TConnection |
DSQL |
DSQL |
ssn |
TSession |
MIDAS |
|
prv |
TProvider |
cds |
TClientDataSet |
dcom |
TDCOMConnection |
RX |
|
de |
TDateEdit |
fs |
TFormStorage |
