- •Хороший стиль программирования
- •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. Исключения
Соглашение об именованиях – венгерская нотация
Исключая зарезервированные слова и директивы, которые всегда пишутся в нижнем регистре, все идентификаторы Delphi должны использовать InfixCaps, например:
MyIdentifier MyFTPClass
InfixCaps (CamelCase рус. Верблю́жийРеги́стр, также Горба́тыйРеги́стр, Сти́льВерблю́да) — стиль написания составных слов, при котором несколько слов пишутся слитно без пробелов, при этом каждое слово пишется с заглавной буквы. Стиль получил название CamelCase, поскольку заглавные буквы внутри слова напоминают горбы верблюда (англ. Camel).
Самое главное исключение для всех правил состоит в использовании оттранслированных заголовочных файлов С/С++. В этом случае всегда используются соглашения, принятые в файле источнике. Например, будет использоваться WM_LBUTTONDOWN, а не wm_LButtonDown.
2.1. Именование модулей
Наименование модуля должно построено быть по принципу: "u" + "Имя формы". Если модуль не содержит формы (модуля данных), то первая литера "u" сохраняется, далее идет функциональное наименование модуля.
2.2. Именование форм и модулей данных
Имена для форм выбираются исходя из функционального назначения. Имя для главной формы "MainForm", независимо от названия проекта.
Имя формы строится по принципу "Функциональное имя формы" + "Form".
Имя модуля данных строится по принципу: "Имя формы без постфикса Form" + "DM".
Главный модуль данных приложения именуется "MainDM". Главный модуль содержит глобальные параметры подключения к БД, обеспечивает функции для доступа к таблицам с настройками.
Рекомендуется, чтобы каждой форме соответствовал только один модуль данных, ссылающийся только на главный модуль данных приложения. Не допускается наличие у каждого модуля данных своего подключения к БД, если логикой приложения это отдельно не предусмотрено.
Для простых проектов допускается наличие одного глобального модуля данных.
2.3. Именование классов и интерфейсов
Смотри объявление классов и интерфейсов.
Имя класса должно быть именем существительным или фразой с именем существительным.
Имена интерфейсов или классов должны отражать главную цель их создания.
Для разделения слов нельзя использовать символ подчеркивания. Его использование допускается в следующих случаях:
если переменная соответствует переменной либо параметру другого языка (например, это параметр SQL-запроса);
если данная переменная является процедурным указателем, например, указывает на процедуру в DLL, тогда она должна начинаться с символа подчеркивания.
Правильно: AddressForm ArrayIndexOutOfBoundsException
Неправильно: ManageLayout (глагол) delphi_is_new_to_me (подчеркивание)
2.4. Именование полей
При именовании полей всегда необходимо использовать InfixCaps. Всегда объявлять переменные только в приватных частях и использовать свойства для доступа к переменным. Для переменных использовать префикс F.
Имена процедур для установки/получения значений свойств должны составляться по правилу: для получения - Get+имя свойства; для установки - Set+имя свойства.
Не используйте все заглавные буквы для констант, за исключением оттранслированных заголовочных файлов.
Не используйте Венгерскую нотацию, за исключением оттранслированных заголовочных файлов.
Правильно FMyString: string;
Неправильно lpstrMyString: string;
Исключение для Венгерской нотации делается в случае объявления перечислимого типа: TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll); bk обозначает ButtonKind
имена переменных
Когда Вы раздумываете над именами переменных, то имейте в виду, что нужно избегать однобуквенных имен, кроме как для временных переменных и переменных цикла.
Переменные цикла именуются I (обычно) и J, K (для вложенных циклов, когда I уже используется). Однако это не значит, что не должны быть использованы более выразительные имена, например,UserIndex.
Другие случаи использования однобуквенных переменных это S (строка) и R (результат). Однобуквенные имена должны всегда использовать символ в верхнем регистре, но лучше использовать боле значимые имена. Не рекомендуется использовать переменную l (эль), потому что она похожа на 1(единица).
